我不能第一个问这个但我无法在任何地方找到它,所以......
我希望匹配并捕获一系列变量名称'由空格分隔。输入是一个没有任何外来的字符串,格式为
<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; ..我不明白这是怎么发生的。
答案 0 :(得分:0)
[\\s+([a-z][a-z0-9]*)]
是字符类含义:匹配以下任何内容
(
*
)
您可能打算使用(xx)
或(?:xx)
,而不是[xx]
。
使用(xx)
,您将获得groupCount() == 3
使用(?:xx)
,您将获得groupCount() == 2
。
例如,请参阅IDEONE,这也表明它们都不是你想要的,因为你只得到第一个和最后一个变量。
您可以使用正则表达式验证字符串,但split()
是获取所需值的最佳方式。