C++ 正则表达式:捕获不带前导字符的字符串
大家晚上好 我的字符串:C++ 正则表达式:捕获不带前导字符的字符串,c++,regex,c++11,ecmascript-5,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) 它匹配搜索的部分,但有一个问题:匹配包含前导+/-。我想我可以用lookback来解决这个问题,但是因为我使用的是带有ECMAScript的C++11库,所以这是不受支持的 有人知道怎么解决这个问题吗 谢谢:)根据更多评论重新编写。 好的,根据您评论中提供的附
4x^2+1.5-x
4x^2-x+1.5
1.5+4x^2-x
我想捕捉那些方程的后面没有“x”或前面没有+/-符号的部分(1.5)。我尝试了这个正则表达式:
[^\^](\d+(\.\d+)?)(?!x)
它匹配搜索的部分,但有一个问题:匹配包含前导+/-。我想我可以用lookback来解决这个问题,但是因为我使用的是带有ECMAScript的C++11库,所以这是不受支持的
有人知道怎么解决这个问题吗
谢谢:)根据更多评论重新编写。 好的,根据您评论中提供的附加标准和澄清:
- 提取后面不带“x^n”的数字李> 它们可以到处出现,在开始、中间或结束时
- 他们可以(!)前面有一个“+”/“-”。如果它是一个“+”,则不应捕获它,而应捕获一个“-”。(澄清:需要捕获两者,只需显示
)-
- 在这些数字之后,也可以有一个“+”或“-”(罕见的情况,但需要注意)李>
- (重申:不能使用负面lookbehinds)
(?:[-+]| ^)[0-9.]+(?=[-+]|$)
这将与以下内容匹配(这里没有设置格式和突出显示的好方法,因此我将匹配项包装在[]
中):
您需要去掉前导的+
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
)
)
你能不能只看第一场比赛,而不是整个比赛?那只包括数字。你能更具体地说明你真正想要什么吗?其中一些4和所有2的后面也没有x、+或-。。你也想配那些吗?你只是想要字符串中的第一个数字吗?啊,很抱歉回答得太晚:)@crayon我想从这些函数中提取常量,后面没有“x^n”的数字。因为它们可以在任何地方出现,在开始、中间或结束时,它们可以在它们前面有一个“+”/“-”。如果它是一个“+”,则不应捕获它,而应捕获一个“-”。在这些数字之后,也可以有一个“+”或“-”(罕见的情况,但需要注意)。@igortandtnik其他数字也可以是浮点数,所以它们也会被捕获(如果这是你的意思,不确定)。谢谢,但问题是我不能使用lookback(见上文),因为ECMAScript不支持它。@TheFunnyTree,但是,你确定ECMAScript不支持lookbehinds吗?我发誓它支持固定宽度的lookbehinds,但不支持可变宽度?编辑:好吧,该死。做了一些谷歌搜索,你是对的。。shady@TheFunnyTree你知道,也许我误解了你的第三点。我的解释是:“不要捕获前面有+的数字,只捕获前面有-”的数字。但现在我在想,也许你想捕获两者,但只想让数字显示操作符,如果它是a-。注意,捕捉“-1”和“+1”,但分别给你“-1”和“1”。我最初的解释正确吗,或者这是你真正想要的吗?第一组很好,如上所述,需要“-”;)但是关于你的[]-大括号的例子:有三个字符串,其中带“+”的数字不会被捕获-为什么?粗体编辑:是的,这就是重点;D@TheFunnyTree啊哈,好的。。重述我的答案。
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
)
)