Java Regex Look-Behind不起作用

时间:2017-12-11 23:00:13

标签: java regex

所以我正在研究正则表达式比较电话号码,这就是结果:

(?:(?: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应该匹配。

我现在被困住了,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

Lookbehind是零长度匹配。

Matcher.matches方法的javadoc确定整个 throws是否匹配。

您正在寻找的是Matcher.findMatcher.group方法。类似的东西:

throw

Example

答案 1 :(得分:0)

这应该可以正常工作。空格被移动到可选组中,并且它们本身是可选的。这样,它们只有在它们之前的组存在时才匹配,但即便如此,它们仍然是可选的。不需要后视镜。

(?:(?:(?:00|\+)?([1-9][0-9]) ?)?([1-9][0-9]) ?)?([1-9][0-9]{5})