首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的REGEX方括号负匹配还是字符串的开头?

简单的REGEX方括号负匹配还是字符串的开头?
EN

Stack Overflow用户
提问于 2015-02-26 08:16:11
回答 1查看 1.5K关注 0票数 0

我可能有一个简单但令人恼火的正则表达式问题,使用的是PHP的preg_match函数

基本上,我想匹配任何不以+开头,但在字符串开头仍然匹配的数字。

我现在拥有的当前正则表达式正在工作,但在字符串的开头不匹配。

判断力

代码语言:javascript
复制
/[^\+][?\s]((\d+)?([.,])?\d+)/

下面是一些应该捕获的测试输入和期望值。

代码语言:javascript
复制
test 10 test

抓到10 -正确。

代码语言:javascript
复制
10 test test

没有抓住10,但它应该-不正确。

代码语言:javascript
复制
+10 test test

没有抓住10,因为它的开头加-正确。

代码语言:javascript
复制
test + 10 test test

不捕获10,因为它以加号开头,并且在加号和数字正确之间有一个可选的空格。

考试+10 13 51 23

捕获13,因为它是前面没有+-更正的第一个数字。

因此,简单的问题是,如何使方括号中的负运算符与+符号不匹配,但如果一个数字位于字符串的开头,它仍然有效吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-26 08:23:25

那么,您必须将regexp的a字符串而不是+部分替换为字符串,而不是+或行的开头:

代码语言:javascript
复制
/(?:^|[^\+][?\s])((\d+)?([.,])?\d+)/

(?:表示不匹配的括号,简单地说是起始^或匹配前的[^\+][?\s]

编辑:

正如Batungbacal所说,这并不完全是您想要的,因为这个regexp对于10 test失败了。我想我们可以这样做:

代码语言:javascript
复制
/(^|[^\+])(^|[?\s])((\d+)?([.,])?\d+)/

这很管用,但我不觉得很满意。如果有人找到更好的解决办法..。

顺便说一句,注意这个regexp在数字之后没有空格时也是匹配的。我不知道这是不是你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28737384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档