2014-09-10 91 views
0

我需要一个匹配任何1或2个字符的正则表达式(用于php),该字符以+开始并且不以*结束。正则表达式的单词后面跟着星号

到目前为止,我得到了这一个:/\+\b\w{1,2}\b/它发现+a3,但也发现+a3*因为星号被视为后面的单词。

在像+find +in +me*这样的字符串中,我只想找到+in而不是+me*。我试过/\+\b[\w\*]{1,2}\b/,但这似乎没有任何区别。

preg_replace($regex,'','+do+find +in +me*'); //expected result: '+do+find +me*' 

回答

3

如何:

/\+\w{1,2}\b(?!\*)/ 

(?!\*)是保证一个*不遵循这两个字符负前瞻。

\b\+\w之间不是强制性的。

根据编辑评论:

这“无所谓+ 2C”相匹配的“+ 2C”我需要做什么改变,它不会满足这一点,但仅针对“无论+ 2C”匹配或 “+ 2C无所谓”

使用这一个:

/(?:^|\s)\+\w{1,2}(?:\s|$) 

根据评论:

/(?<=^|\s)\+\w{1,2}(?:\s|$)/ 
+0

这个作品谢谢 - 我想我只试过'(!\ *)'但没有问号。感谢您的解释和补充评论。 – Tarsis 2014-09-10 09:15:08

+0

这匹配“任何+ 2c”中的“+ 2c”,我需要改变的是它不会匹配这个,但只匹配“任何+ 2c”或“+ 2c任何”匹配。 – Tarsis 2014-09-10 09:29:37

+0

@Tarsis:请参阅我的编辑。 – Toto 2014-09-10 10:03:21