2017-07-18 98 views
2

我希望我的正則表達式匹配?ver?v,但?version正則表達式匹配的原話

這是我到目前爲止有:$parts = preg_split("(\b\?ver\b|\b\?v\b)", $src);

我覺得麻煩可能是我如何逃脫?

+0

請添加兩個或三個示例輸入,以便將來的SO讀者可以看到您在上下文中提問的內容。 – mickmackusa

+0

你稱之爲「確切的詞」不是很清楚,特別是因爲「?」不是一個單詞字符。你應該解釋一個詞的確切含義。 –

+0

@mickmackusa:沒關係,一直都不清楚(幸運的是!)。 –

回答

6

您的模式會嘗試匹配前面帶有單詞char的?,由於沒有,因此您沒有匹配。

使用以下模式:

'/\?v(?:er)?\b/' 

regex demo

圖案的詳細資料

  • \? - 字面?焦炭
  • v(?:er)? - vver
  • \b - 字邊界(即,在vver之後必須有非字字符(不是數字,字母或_)或字符串的結尾。

注意你不需要第一(初始)字的邊界,因爲它已經存在,一個?(非字字符)和v(字字符)之間。如果?是可選的,那麼您需要一個字邊界。

5

請嘗試以下正則表達式模式;

(\?v(?:\b|(?:er(?!sion)))) 

Demo

這將使?ver?v,但會使用負前瞻,以防止匹配,如果?ver之後sion,爲你的情況?version

+0

你如何知道目標子串在行尾處終止?你的模式實際上可能是不正確的,但是直到OP提供了一些示例字符串,我們纔會知道。這不是Wiktor正確模式的問題。 – mickmackusa

+0

OP確實提供了示例字符串 - 他說「我想讓我的正則表達式匹配'?ver'和'?v',但不是'?version'」。 –

+0

然而,由於這是OP的意思,而且他們沒有很好地闡述它,所以我已經編輯了我的答案,因爲它不需要原始解決方案。感謝您指出了這一點! :) –