我的正则表达式无法正常工作

时间:2012-03-22 02:36:23

标签: java regex

继承我的正则表达式:

[A-Z][a-z]?-?([A-Z][a-z]?)?

我想要这个正则表达式匹配以下内容:

A
Ab
Ef-G
Hi-Jk
F-Tk
F-D

我发送的是“M-F”,它只在“F”上匹配,我希望它匹配整个字符串“M-F”。

继承我的java代码(但希望你不必阅读它):

// Convert the daycode string into an array of daycodes
ArrayList<String> newDP = new ArrayList<String>();

Pattern regex = Pattern.compile("[A-Z][a-z]?-?([A-Z][a-z]?)?", Pattern.UNICODE_CASE);
Matcher regexMatcher = regex.matcher(dayPattern);
while (regexMatcher.find())
{
  for (int i = 1; i <= regexMatcher.groupCount(); i++)
  {
    newDP.add(regexMatcher.group(i));
  }
}

帮帮我?拜托,谢谢你。

修改 我还需要通过以下输入进行扩展:

MTu-ThFSa

返回输出:

["M", "Tu-Th", "F", "Sa"]

2 个答案:

答案 0 :(得分:4)

使用anchors^[A-Z][a-z]?-?([A-Z][a-z]?)?$

强制它匹配整个字符串

虽然您应该稍微更改分组,但实际上只能匹配这些分组。类似的东西:

^[A-Z]  ([a-z]  (-  ([A-Z]  ([a-z])?  )?  )?  )?$
        |-------------------------------------|
                |-------------------------|
                    |-----------------|
                            |-----|

答案 1 :(得分:1)

您的问题是您只是添加了1组及以上组:

for (int i = 1; ...

使用正则表达式匹配,组0是整体匹配。示例中的第1组只是第二个括号中的组:([A-Z][a-z]?)?

你应该改变你的循环来访问组0,这将是整个匹配:

while (regexMatcher.find())
{
    newDP.add(regexMatcher.group(0));
}

在原始帖子中进行编辑:

这是一个固定的正则表达式:

[A-Z][a-z]?(-[A-Z][a-z]?)?

只有在跟随字母的情况下才允许使用连字符。