我是新来的,这是我的第一篇文章。我也是Java和RegEx的新手。所以…
我正在使用Java编写一个RegEx,以匹配聊天中的电话号码,格式如下:+XXX (XXX) XXX XXXX
用数字和/或文字书写。
这是我的regex:"\\+?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d){1,3}?[._\\-]? \\(?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d){3}\\)?[._\\-]? (zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d){3}[._\\-]?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d){4}";
然后使用方法.group()
来打印完整的匹配,它工作得很好,但如果我想用这个循环打印每个不同的组:
for (int i = 1; i <= match.groupCount(); i++) {
if (match.group(i) != null) {
System.out.println("Group " + i + ": " + match.group(i));
}
}
而每一个字,都是一个字,一个字,一个字,一个字。
为什么会这样?我需要做什么来打印每个组的每个元素?
我也试过这个正则表达式"\\+?(zero{1,3}|uno{1,3}|due{1,3}|tre{1,3}|quattro{1,3}|cinque{1,3}|sei{1,3}|sette{1,3}|otto{1,3}|nove{1,3}|\\d{1,3})?[._\\-]?\\(?(zero{3}|uno{3}|due{3}|tre{3}|quattro{3}|cinque{3}|sei{3}|sette{3}|otto{3}|nove{3}|\\d{3})\\)?[._\\-]?(zero{3}|uno{3}|due{3}|tre{3}|quattro{3}|cinque{3}|sei{3}|sette{3}|otto{3}|nove{3}|\\d{3})[._\\-]?(zero{4}|uno{4}|due{4}|tre{4}|quattro{4}|cinque{4}|sei{4}|sette{4}|otto{4}|nove{4}|\\d{4})";
还有这个"\\+?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d{1,3})?[._\\-]?\\(?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d{3})\\)?[._\\-]?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d{3})[._\\-]?(zero|uno|due|tre|quattro|cinque|sei|sette|otto|nove|\\d{4})";
提前感谢!:)
1条答案
按热度按时间brtdzjyr1#
你需要将你的组设置为non-capturing
(?: ... )
,然后将它们 Package 成捕获组。类似于:推理:如果组匹配多次,则仅捕获最后一次出现。
此外,我还将空格放入分隔符的符号类中。