Java中的正则表达式,用于匹配一串带有空格的单词

时间:2016-06-13 14:07:20

标签: java regex variables

我不能第一个问这个但我无法在任何地方找到它,所以......

我希望匹配并捕获一系列变量名称'由空格分隔。输入是一个没有任何外来的字符串,格式为

<var> <var> <var> ... <var>

其中每个变量&lt; var&gt;是典型的编程语言类型变量:首先是一个字母,然后是任意数量的(包括没有)字母和/或数字。

我正在使用正则表达式字符串

"(?i)([a-z][a-z0-9]*)[\\s+([a-z][a-z0-9]*)]+"

我正在拼写例如a-z,以避免使用凌乱的反斜杠。

模式基本上有效但当我得到Matcher的groupCount()时,它总是= 1并且它是整个输入。为什么没有捕获变量?

我的逻辑是匹配第一个变量,然后匹配重复的空白对和另一个变量。我是否错误地陈述了重复模式?我有一个替代方案,如果模式匹配,则使用split(),但我想更好地理解正则表达式。另外,奇怪的是,当变量的长度> 1时,模式在存在之后没有所需空间时匹配ONE变量。 1,例如&#34; abc&#34; ..我不明白这是怎么发生的。

1 个答案:

答案 0 :(得分:0)

[\\s+([a-z][a-z0-9]*)]字符类含义:匹配以下任何内容

  • 空白
  • (
  • A-Z
  • 0-9
  • *
  • )

您可能打算使用(xx)(?:xx),而不是[xx]

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

例如,请参阅IDEONE,这也表明它们都不是你想要的,因为你只得到第一个和最后一个变量。

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