使用PHP的preg_match函数,我遇到了一个可能很简单但令人恼火的regex问题
基本上,我想匹配任何不以+开头并且仍然匹配字符串开头的数字。
我现在拥有的当前正则表达式可以工作,但在字符串开头不匹配。
正则表达式是
/[^'+][?'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,因为它是第一个前面没有+-正确的数字
因此,简单的问题是,如何使方括号中的负运算符与+符号不匹配,但如果一个数字位于字符串的最开头,它仍然有效?
好吧,您必须用字符串而不是+
或行的开头来替换正则表达式的一个字符串而不是一个+
部分:
/(?:^|[^'+][?'s])(('d+)?([.,])?'d+)/
(?:
表示不匹配的括号,而只是起始的^
或预匹配的[^'+][?'s]
。
编辑:
正如Braydon Batungbacal所说,这并不是你想要的,因为这个正则表达式在10 test
中失败了。我想我们可以这样做:
/(^|[^'+])(^|[?'s])(('d+)?([.,])?'d+)/
这是有效的,但我并不觉得它真的令人满意。如果有人找到更好的解决方案。。。
顺便说一句,请注意,当数字后面没有空格时,此regexp也会匹配。我不知道这是不是你想要的。