Java 正则表达式以匹配一个或多个字符a或仅匹配一个字符b

Java 正则表达式以匹配一个或多个字符a或仅匹配一个字符b,java,regex,perl,matching,Java,Regex,Perl,Matching,我通过UI获取用户输入,我必须验证它。输入文本应符合下列条件 它应该以一个或多个结尾 空白字符或仅带 单个'=' 我可以用 “*[\s=]+” 但它也匹配多个“=”我不想这样。 请帮助。尝试以下表达式: ".*(\\s+|=)" 尝试以下表达式: ".*(\\s+|=)" 您可以使用: 此表达式表示在字符串末尾匹配一个或多个空格字符或一个等于。$是一个匹配字符串末尾的字符串(正如您所提到的,您正在查找字符串末尾的字符) (正如tchrist在评论中正确指出的,$匹配行的结尾,而不是在多行

我通过UI获取用户输入,我必须验证它。输入文本应符合下列条件

它应该以一个或多个结尾 空白字符或仅带 单个'='

我可以用

“*[\s=]+”

但它也匹配多个“=”我不想这样。 请帮助。

尝试以下表达式:

".*(\\s+|=)" 
尝试以下表达式:

".*(\\s+|=)" 
您可以使用:

此表达式表示在字符串末尾匹配一个或多个空格字符一个等于。
$
是一个匹配字符串末尾的字符串(正如您所提到的,您正在查找字符串末尾的字符)

(正如tchrist在评论中正确指出的,
$
匹配行的结尾,而不是在多行模式下。如果在您的情况下是这样的,并且您确实在查找字符串的结尾而不是行的结尾,那么您可以改为使用
\Z
,它匹配字符串的结尾,而不考虑mult)在线模式。)


如果您想确保最后只有一个
=
,您可以使用(在本例中,具体地说,是一个负查找)。查找是一个零宽度断言,它告诉正则表达式引擎断言必须通过才能匹配模式,但它不使用任何字符

(\s+|(?<!=)=)$
(\s+|)(?
在这种情况下,
(?告诉正则表达式引擎,当前位置前的字符不能是
=
。当放入表达式时,
(?意味着
=
仅当前一个字符不是
=

时才会匹配。您可以使用:

此表达式表示在字符串结尾处匹配一个或多个空白字符一个等于。
$
是一个匹配字符串结尾的字符串(正如您提到的,您正在查找字符串结尾处的字符)

(正如tchrist在评论中正确指出的,
$
匹配行的结尾,而不是在多行模式下。如果在您的情况下是这样的,并且您确实在查找字符串的结尾而不是行的结尾,那么您可以改为使用
\Z
,它匹配字符串的结尾,而不考虑mult)在线模式。)


如果您想确保最后只有一个
=
,您可以使用(在本例中,具体地说,是一个负查找)。查找是一个零宽度断言,它告诉正则表达式引擎断言必须通过才能匹配模式,但它不使用任何字符

(\s+|(?<!=)=)$
(\s+|)(?
在这种情况下,
(?告诉正则表达式引擎,当前位置前的字符不能是
=
。当放入表达式时,
(?意味着
=
仅当前一个字符不是
=

开始字符串时才会匹配

任何不是“=”(为了避免双“=”)的东西

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

结束

^([^=]*[\s+|=])$
应该可以工作:-)

开始字符串

任何不是“=”(为了避免双“=”)的东西

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

结束

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

应该可以工作:-)

这不会只检查一个“=”。它匹配以两个==alsoNo结尾的字符串,您错了。① <代码>\s
在字符类中不会失去其特殊意义。② \字符不是斜杠,而是反斜杠。③ 如果您使用的是Java,
\s
不支持Unicode。相反,Perl支持Unicode。④
$
匹配字符串末尾和换行符之前的字符串结尾,或者多行模式下的任何位置。我认为tchrist是正确的。我无法用Perl或Java证实这一说法。@tchrist,@musiKk你们都是对的。我更新了我的答案以消除错误信息。我非常担心
\s
将匹配e换行符位于非-chomp
ed字符串的末尾。小心。这不会只检查一个“=”。它与以2==alsoNo结尾的字符串匹配,您错了。① <代码>\s
在字符类中不会失去其特殊意义。② \字符不是斜杠,而是反斜杠。③ 如果您使用的是Java,
\s
不支持Unicode。相反,Perl支持Unicode。④
$
匹配字符串末尾和换行符之前的字符串结尾,或者多行模式下的任何位置。我认为tchrist是正确的。我无法用Perl或Java证实这一说法。@tchrist,@musiKk你们都是对的。我更新了我的答案以消除错误信息。我非常担心
\s
将匹配非
chomp
ed字符串结尾的换行符。小心。太奇怪了!你想让双引号代替反斜杠??太奇怪了!你想让双引号代替反斜杠??简单的解释,我想要的方式。谢谢@guidhouse简单的解释,我想要的方式。谢谢@guidhouse