RegEx:捕获没有前导字符的字符串

时间:2013-11-01 00:22:12

标签: c++ regex c++11 ecmascript-5

大家晚上好。

我的字符串:

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

我想捕捉这些方程式的一部分而没有“x”后面或另一个符号而不是前面的+/-(1.5)。我试过这个正则表达式:

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

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

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

谢谢:)

1 个答案:

答案 0 :(得分:0)

根据更多评论重写。

好的,根据您评论中提供的其他标准和说明:

  • 提取数字后面没有'x ^ n'。
  • 它们可以出现在任何地方,开头,中间或末尾
  • 他们可以(!)在他们面前有一个'+'/' - '。如果它是'+',这不应该被捕获但是' - '应该。 (澄清:需要捕获两者,只有SHOW -
  • 在这些数字之后,也可以有'+'或' - '(罕见的情况,但需要注意)。
  • 重申:不能使用负面反馈)

(?:[-+]|^)[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
        )
)