2011-04-13 88 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

相关问题