正则表达式:捕获不带前导字符的字符串

RegEx: Capture string without a leading character

本文关键字:字符 字符串 正则表达式      更新时间:2023-10-16

大家晚上好。

我的琴弦:

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

我想捕获这些方程中没有"x"的部分,或者前面没有+/-以外的另一个符号(1.5)。我尝试了这个正则表达式:

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

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

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

谢谢:)

根据

更多注释重写。

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

  • 提取数字后面没有"x^n"。
  • 它们可以出现在任何地方,在开头,中间或结尾
  • 他们可以(!)在他们前面有一个"+"/"-"。 如果是"+",则不应捕获此内容,但应捕获"-"。(澄清:需要同时捕获两者,只是显示-
  • 在这些数字之后,也可以有一个"+"或"-"(罕见的情况,但需要注意)。
  • 重申:不能使用负面回溯)

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