2011-04-13 85 views

回答

2

開始字符串

任何不是 「=」(以避免雙 「==」)

的一個或多個空格OR一個 「=」 串

^([^=]*[\s+|=])$ 

應該工作:-)

+0

簡單的解釋,以我想要的方式工作。謝謝@guidhouse – Ram 2011-04-13 18:26:55

1

試試這個表達式:

".*(\\s+|=)" 
+0

這是多麼奇怪!你想要雙引號吃你的反斜槓? – tchrist 2011-04-13 13:52:11

3

您可以使用alternation

(\s+|=)$ 

該表達式表示匹配的一個或多個空白字符一個平等相待,在字符串結束。 $是一個anchor,它匹配字符串的末尾(正如您所提到的,您正在查找字符串末尾的字符)。

(如tchrist正確的評論中指出,$匹配而不是end of string當在多行模式的終結。如果這是你的情況屬實,你確實是在尋找字符串的結尾,而不是該行的末尾,你可以使用\Z代替,這無論多模式字符串的結尾匹配。)


如果你想確保只有一個=末,你可以使用一個lookaround(在這種情況下,具體來說是一個負向後臺)。查找是零寬度斷言它告訴正則表達式引擎斷言必須通過模式匹配,但它不消耗任何字符。

(\s+|(?<!=)=)$ 

在這種情況下,(?<!=)告訴正則表達式引擎,當前位置不能是=前的字符。在表達式中,(?<!=)=表示僅當前一個字符不是=時,=纔會匹配。

+0

這不檢查只是一個'='。它匹配字符串結尾與兩個==也 – Ram 2011-04-13 13:47:10

+1

不,你錯了。 ①'\ s' **在字符類中不會失去其特殊含義。**②\字符不是斜槓,而是反斜槓。 ③如果使用Java,'\ s'在Unicode上不起作用。相反,Perl支持Unicode。 ④'$'既可以匹配字符串的末尾,也可以匹配字符串末尾的換行符 - 或者多行模式中的任意位置。 – tchrist 2011-04-13 13:47:12

+0

@ram看我的編輯。 – 2011-04-13 13:47:20

相關問題