2013-11-01 22 views
0

大家晚上好。正则表达式:不带前导字符的捕获字符串

我的字符串:

4x^2+1.5-x 
4x^2-x+1.5 
1.5+4x^2-x 

我想捕捉这些方程的一部分无“x”的后面或其它符号比+/-在它前面(1.5)。我试过这个正则表达式:

[^\^](\d+(\.\d+)?)(?!x) 

它匹配搜索到的部分,但有一个问题:匹配包含前导+/-。我认为我可以用逆序来解决这个问题,但是因为我使用ECMAScript来处理C++ 11库,所以不支持。

有人知道如何解决这个问题吗?

谢谢:)

+0

你可能只是看看第一个子匹配,而不是整个匹配?那将只包括数字。 –

+0

你能更具体地说明你实际上想要什么吗?其中几个4和所有这2个也没有x,+或 - 在他们后面。你是否也想要匹配那些?你只是想要在字符串中的第一个数字? –

+0

啊,抱歉,迟到的答案:) @CrayonViolent我想从这些函数中提取常量,数字后面没有'x^n'。因为它们可以出现在任何地方,在开始,中间或结束时,它们可以(!)在它们前面有一个“+”/“ - ”。如果它是'+',这不应该被捕获,但' - '应该。在这些数字之后,可以有'+'或' - '(罕见情况,但需要注意)。 –

回答

0

改写基于甚至更多评论。

好了,根据您的意见所提供的附加标准,并澄清:

  • 提取号码没有“X^N”甩在身后。
  • 他们可以出现在任何地方,在开始,在中间或结束
  • 他们可以(!)在他们面前有一个'+'/' - '。如果它是'+',这不应该被捕获,但' - '应该。 (澄清:需要同时捕获,只是显示-
  • 这些数字后,可以有'+'或' - '(罕见的情况下,但需要注意)。
  • 重申:不能使用负lookbehinds)

(?:[-+]|^)[0-9.]+(?=[-+]|$)

这将匹配以下(有格式化和此强调,所以我裹在比赛中[]没有什么好办法):

4x^2[+8.15]-x 
4x^2-x[+1.25] 
[1.9]+4x^2-x 
[3]+2x^4-x 
x[-6] 
[.7]+3x 
[-.75]+3x 
4x[-0.5] 
4x[+0.8] 
77x 
9.8x 
-2.52x^3-4x^2[+1.45] 
4x^2[+8.15][-1.5] 

你将需要剥离领先+

Array 
(
    [0] => Array 
     (
      [0] => +8.15 
      [1] => +1.25 
      [2] => 1.9 
      [3] => 3 
      [4] => -6 
      [5] => .7 
      [6] => -.75 
      [7] => -0.5 
      [8] => +0.8 
      [9] => +1.45 
      [10] => +8.15 
      [11] => -1.5 
     ) 
) 
+0

谢谢,但问题是我不能使用lookbehind(见上面),因为ECMAScript不支持它。 –

+0

@TheFunnyTree argh,好吧..看看我的编辑 –

+0

@TheFunnyTree,但是,你确定* ECMAScript不支持向后看?我发誓它支持固定宽度的lookbehinds,但不是可变宽度? **编辑**:好该死。做了一些谷歌搜索,你是对的..黑幕 –

相关问题