Java 带空格的正则表达式

Java 带空格的正则表达式,java,regex,whitespace,Java,Regex,Whitespace,我正在尝试编写一个正则表达式来匹配以下内容: act=MATCHME act=Match me too 我有下面的正则表达式可以匹配其中一个,但不能同时匹配两个。以下是我的努力: matches MATCHME: act=(\w+) matches Match me too: (\w+\s\w+\s\w+) 有没有办法把两者结合起来,或者我可能看错了 我正在使用JAVA正则表达式引擎。您可以使用可选的非捕获组: act=(\w+(?:\s+\w+\s+\w+)?) ^^^^

我正在尝试编写一个正则表达式来匹配以下内容:

act=MATCHME
act=Match me too 
我有下面的正则表达式可以匹配其中一个,但不能同时匹配两个。以下是我的努力:

matches MATCHME: act=(\w+)
matches Match me too: (\w+\s\w+\s\w+)
有没有办法把两者结合起来,或者我可能看错了


我正在使用JAVA正则表达式引擎。

您可以使用可选的非捕获组:

act=(\w+(?:\s+\w+\s+\w+)?)
        ^^^^^^^^^^^^^^^^^

匹配量化子模式的1次或0次出现。当它应用于分组构造时,量化应用于整个模式序列,因此
(?:\s+\w+\s+\w+)
匹配1个或0个1+空格、1+单词字符、1+空格和1+单词字符的序列


如果需要在
act=

之后捕获两个单词的子字符串,您可以进一步细分该模式。当然,您知道如何编写正则表达式。

此正则表达式可能会帮助您

^[a-zA-Z ]*$

在正则表达式中,“或”与什么匹配?您可以在这里匹配“*”,这适用于您的两个示例。还有别的。因此,缺少“不应匹配”的部分:示例另外,?:运算符(Elvis运算符)仅用于表示在匹配过程中必须考虑该组,但不捕获该组。是的,它不会创建任何附加的
.group()
。只需将必须作为序列匹配的子模式分组,就可以使整个模式序列成为可选的(或者使用
*
/
+
量词重复零次/一次或多次,或者使用
{x}
量词重复某个精确次数,或者使用
{x,y}
量词重复x到y次)。