正则表达式匹配一个或多个char a或char b中的一个

时间:2011-04-13 13:37:00

标签: java regex perl matching

我通过UI获取用户输入,我必须验证它。输入文字应遵守以下条款

  

它应该以一个或多个结束   白色空间字符或只是   单'='

我可以用

  

“。* [\ s =] +”

但它匹配多个'='也是我不想要的。 请帮忙。

3 个答案:

答案 0 :(得分:3)

您可以使用alternation

(\s+|=)$

此表达式表示在字符串的末尾匹配一个或多个空白字符等于1。 $anchor,它匹配字符串的结尾(正如您所提到的那样,您正在查找字符串末尾的字符)。

(正如tchrist在评论中正确指出的那样,$在多线模式下匹配的结尾而不是end of string。如果在您的情况下这是真的,你确实在寻找字符串的结尾而不是行的结尾,你可以使用\Z来代替字符串的末尾,而不管多行模式。)


如果你想确保最后只有一个=,你可以使用lookaround(在这种情况下,具体为负面的后视)。外观是零宽度断言,它告诉正则表达式引擎断言必须传递以匹配模式,但它不消耗任何字符。

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

在这种情况下,(?<!=)告诉正则表达式引擎,当前位置之前的字符不能是= 。当放入表达式时,(?<!=)=表示只有前一个字符不是==才会匹配。

答案 1 :(得分:2)

开始字符串

任何不是“=”(避免双重“==”)

一个或多个空格 OR 一个“=”

字符串结尾

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

应该工作: - )

答案 2 :(得分:1)

试试这个表达式:

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