使用PHP的preg_match函数,我有一个简单但令人恼火的正则表达式问题
基本上,我希望匹配任何不以+开头的数字,并且仍然匹配字符串的开头。
我现在使用的当前正则表达式正在工作但在字符串的开头没有匹配。
正则表达式是
/[^\+][?\s]((\d+)?([.,])?\d+)/
这是一些测试输入和它应该捕获的预期值。
test 10 test
抓住10 - 正确。
10 test test
不会抓到10,但它应该 - 不正确。
+10 test test
不会捕获10,因为它以加号开头 - 正确。
test + 10 test test
不会捕获10,因为它以加号开头并且在加号和数字之间有可选空格 - 正确
测试+10 13 51 23
捕获13,因为它是第一个不以+ - 正确
开头的数字所以简单的问题是,如何使方括号中的负数运算符与+符号不匹配,但如果数字位于字符串的最开头仍然有效?
答案 0 :(得分:1)
好吧,你必须用字符串而不是+
或行的开头替换你的正则表达式的字符串而不是+
部分:
/(?:^|[^\+][?\s])((\d+)?([.,])?\d+)/
(?:
代表不匹配的括号,只是开头的^
或您的赛前[^\+][?\s]
。
编辑:
像Braydon Batungbacal说的那样,这并不是你想要的,因为10 test
的正则表达式失败了。我想我们可以这样做:
/(^|[^\+])(^|[?\s])((\d+)?([.,])?\d+)/
这很有效,但我觉得它并不令人满意。如果有人找到了更好的解决方案......
顺便说一下,请注意,当数字后没有空格时,此正则表达式也会匹配。我不知道这是不是你想要的。