Java中的正则表达式,用于匹配字符串中的空格

Java中的正则表达式,用于匹配字符串中的空格,java,regex,variables,Java,Regex,Variables,我不是第一个问这个问题的,但是我在任何地方都找不到,所以 我想匹配并捕获由空格分隔的“变量名”列表。输入是一个字符串,没有任何无关的内容,其格式为 <var> <var> <var> ... <var> 为了避免使用凌乱的反斜杠,我在拼写eg a-z 该模式基本上是有效的,但当我得到匹配器的groupCount()时,它总是=1,这是整个输入。为什么变量没有被捕获 我的逻辑是匹配第一个变量,然后匹配重复的空白对和另一个变量。我是不是把重复的模式说

我不是第一个问这个问题的,但是我在任何地方都找不到,所以

我想匹配并捕获由空格分隔的“变量名”列表。输入是一个字符串,没有任何无关的内容,其格式为

<var> <var> <var> ... <var>
为了避免使用凌乱的反斜杠,我在拼写eg a-z

该模式基本上是有效的,但当我得到匹配器的groupCount()时,它总是=1,这是整个输入。为什么变量没有被捕获

我的逻辑是匹配第一个变量,然后匹配重复的空白对和另一个变量。我是不是把重复的模式说错了?我有另一种选择,如果模式匹配,则使用split(),但我想更好地理解regex。此外,奇怪的是,当变量的长度大于1时,模式匹配一个变量,而变量之后没有所需的空间,例如“abc”。。我不明白这是怎么回事。

[\\s+([a-z][a-z0-9]*)]
是一个字符类,意思是:匹配以下任何一项

  • 空白
  • a-z
  • 0-9
  • *
您可能打算使用
(xx)
(?:xx)
,而不是
[xx]

使用
(xx)
您将获得
groupCount()==3

使用
(?:xx)
您将获得
groupCount()==2

例如,可以看到,这也表明它不是您想要的,因为您只得到第一个和最后一个变量


您可以使用正则表达式验证字符串,但
split()
是获取所需值的最佳方法。

发布您的代码。您是否使用了
而(matcher.find()){/*在此处获取匹配项*/}
?谢谢。我知道方括号看起来不对,但我不认为括号是对的——这解释了奇怪的不匹配。我没有考虑过猫叫声或非cap组类型,但我会尝试它们。表意文字的例子很清楚。但由于我还没有尝试新代码,我仍然不确定groupCount是否正确,或者是否需要split()。似乎所有的正则表达式更正都已经捕获了这些组,但考虑到过去的经验,它们可能位于嵌套组(php、ColdFusion)中,与split()相比,获取它们几乎不值得仍然没有对它进行编码,但是对于新表达式,groupCount只有2或3,我认为让regex返回所有片段可能是不可能的。。我认为这是可能的。但分裂也会起作用。再次感谢。
"(?i)([a-z][a-z0-9]*)[\\s+([a-z][a-z0-9]*)]+"