2014-09-10 71 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

相關問題