我可能有一个简单但令人恼火的正则表达式问题,使用的是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,因为它是前面没有+-更正的第一个数字。
因此,简单的问题是,如何使方括号中的负运算符与+符号不匹配,但如果一个数字位于字符串的开头,它仍然有效吗?
发布于 2015-02-26 08:23:25
那么,您必须将regexp的a字符串而不是+部分替换为字符串,而不是+或行的开头:
/(?:^|[^\+][?\s])((\d+)?([.,])?\d+)/(?:表示不匹配的括号,简单地说是起始^或匹配前的[^\+][?\s]。
编辑:
正如Batungbacal所说,这并不完全是您想要的,因为这个regexp对于10 test失败了。我想我们可以这样做:
/(^|[^\+])(^|[?\s])((\d+)?([.,])?\d+)/这很管用,但我不觉得很满意。如果有人找到更好的解决办法..。
顺便说一句,注意这个regexp在数字之后没有空格时也是匹配的。我不知道这是不是你想要的。
https://stackoverflow.com/questions/28737384
复制相似问题