正则表达式适用于java。util。正则表达式。模式,但不是com。奥罗公司。文本正则表达式。Perl5匹配器
我今天在我们的遗留代码中遇到了一个bug,它使用Perl5Compiler
和Perl5Matcher
使用以下正则表达式来验证英国邮政编码:
((?i)(([A-Z]{2}[0-9]{1,2})|([A-Z]{1,2}[0-9][A-Z])|([A-Z][0-9]{1,2}))\\s([0-9][A-Z]{2})|(BFPO\\s\\d{1,4})|(GIR\\s0AA))
但是,它无法正确验证邮政编码,例如“G12 4NNT”(在本例中,最后一部分仅允许是一个数字,后面跟着两个字母)。我通过使用java.util.regex.Pattern
类修复了这个问题,该类正确地使用了上述正则表达式,并通过了我所有的单元测试
然而,现在我很好奇为什么它不适用于Perl5
。这两个API使用的正则表达式语法有根本区别吗
# 1 楼答案
我认为问题与question to the above linked answer中的问题相同
如果在Java中使用
matches()
方法:它与完整的字符串匹配,要在Perl中具有相同的行为,必须围绕表达式进行锚定:
^
匹配字符串的开头$
匹配字符串的结尾