如果我以錯誤的方式提問,請告訴我。不知道我是否從正確的角度接近它。無法識別兩個關鍵字
我的正則表達式看起來像這樣。
^.+(ef?)|(mn?).+$
我想在下面的文本匹配線2和4。
ABCD
EFGH
IJKL
MNOP
QRST
因爲它似乎,只有最後一個惹人眼球的編輯。我錯過了什麼?
我試圖按照some examples來檢測例如「ALPHA」和「BETA」的字眼,但顯然,我對它的工作方式太無知。
如果我以錯誤的方式提問,請告訴我。不知道我是否從正確的角度接近它。無法識別兩個關鍵字
我的正則表達式看起來像這樣。
^.+(ef?)|(mn?).+$
我想在下面的文本匹配線2和4。
ABCD
EFGH
IJKL
MNOP
QRST
因爲它似乎,只有最後一個惹人眼球的編輯。我錯過了什麼?
我試圖按照some examples來檢測例如「ALPHA」和「BETA」的字眼,但顯然,我對它的工作方式太無知。
正則表達式引擎會將下面的正則表達式分成兩部分。
^.+(ef?)|(mn?).+$
Part 1| Part 2
首先,part1將被執行。
^.+(ef?)
.+
確保必須有e
之前ATLEAST單個字符存在,但不存在。所以它不符合第二個。並且因爲其餘字符串中不存在字符e
而失敗。
|
OR
現在正則表達式引擎移動到第二部分,
(mn?).+$
匹配包含字母m
的字符串。 m
只存在於第四個字符串中。所以它匹配m
加上以下一個或多個字符,因爲.+
。
正確的做法,以配合2個第4串是:
^.*(ef?).*$|^.*(mn?).*$
OR
^.*(?:(ef?)|(mn?)).*$
使用^.*(?:(ef?)|(mn?)).+$
,如果必須有一個字符如下e
和可選的f
或m
和opt ional n
如果要匹配的字符串以e
或m
開頭,請使用下面的正則表達式。
^(ef?|mn?).+$
注:
.*
匹配任意字符零次或多次。.+
一次或多次匹配任何字符。太棒了。這是我一直想念的問題!雖然你的答案在技術上是正確的,但我建議一個版本顯示正確的語法。爲了避免懷疑(噢,圍繞這麼常見的事情),我正在招搖撞騙,讓別人做我的工作,我會冒昧地編輯你的答覆。如果您不滿意,請隨時糾正。 +1爲一個書呆子級別的準確性。 – 2014-11-03 12:33:39
是的,是的,我做到了。你爲什麼要問? – 2014-11-03 12:47:22
據我所知,'^。+'表示開始時至少有1個符號。但'efgh'和'mnop'都不包含'ef'或'mn'之前的任何內容。 – Epsilon 2014-11-03 12:30:05
@Epsilon實際上是。它只是不顯示。我的錯。假裝之前有一個角色(或切換爲星號而不是加號)。 :) – 2014-11-03 12:31:52