所以我正在研究正则表达式比较电话号码,这就是结果:
(?:(?:0{2}|\+)?([1-9][0-9]))? ?([1-9][0-9])? ?([1-9][0-9]{5})
正如您所看到的,数字之间有空格。我希望它们仅在空格之前有其他数字时出现:
" 0022 45 432345" - 应该匹配 " 45 345678"或" 560032" - 应该匹配 " 324400" - 因为开头的空间而不应该匹配
我一直在阅读有关正则表达式的不同教程,并发现了后视图,但是这样的简单构造(仅用于测试):
Pattern p2 = Pattern.compile("(?<=abc)aa");
Matcher m2 = p2.matcher("abcaa");
不起作用。
你能告诉我什么是错的吗?
另一个问题是 - 我希望字符仅在字符串中的第一个字符时发生,否则它不应该发生。所以代码: 0043 022 234567不应该有效,但022 123450应该匹配。
我现在被困住了,非常感谢任何帮助。
答案 0 :(得分:0)
Lookbehind是零长度匹配。
Matcher.matches
方法的javadoc确定整个 throws
是否匹配。
您正在寻找的是Matcher.find
和Matcher.group
方法。类似的东西:
throw
答案 1 :(得分:0)
这应该可以正常工作。空格被移动到可选组中,并且它们本身是可选的。这样,它们只有在它们之前的组存在时才匹配,但即便如此,它们仍然是可选的。不需要后视镜。
(?:(?:(?:00|\+)?([1-9][0-9]) ?)?([1-9][0-9]) ?)?([1-9][0-9]{5})