你的第一個問題是,你需要三個(可能爲四個)的情況下在你的交替,而不是兩個。
/\breverse!(?:\s|$)/
反向!本身
/\bpush\b/
推動自身
/\breverse!push\b/
一起
/\bpushreverse!(?:\s|$)/
這是可能的情況下
你的第二個問題是,因爲它不是一個\w
一個\b
將不是"!"
後匹配。以下是Perl 5 has to say about \b
,你可能想諮詢您的文檔,看他們是否同意:
詞邊界(「\ B」)是兩個字符之間的點,有一個「\ W」上的一面它和它的另一側的「\ W」(以任意順序),從字符串的開始和結尾開始計算虛數字符以匹配「\ W」。 (在字符類「\ b」表示退格,而不是一個單詞邊界,只是因爲它通常在任何雙引號字符串一樣。)
所以,你需要的正則表達式是一樣的東西
/ \b (reverse!push | reverse! | push) (?: \s | \b | $)+ /gx;
我離開了/s
,因爲沒有在這個表達式時期,因此可以看作是一條線是沒有意義的。如果/s
並不意味着在您的引擎中將其視爲單行,則應該將其添加回來。另外,你應該瞭解你的引擎如何處理交替。我知道在Perl 5中,爲了獲得正確的行爲,您必須按照這種方式來安排這些項目(否則反向!總會贏得反向!推送)。
除了使用(?!\ w)作爲尾部的\ b替換之外,我還使用(?<!\ w)作爲主導的\ b替換方式,以特殊字符(如$!將被匹配。 – 2009-04-27 02:25:01