继承我的正则表达式:
[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"]
答案 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]?)?
只有在跟随字母的情况下才允许使用连字符。