我想检查Java正则表达式中的多行文本。但它总是显示错误的结果。谁能解释我为什么?
例如:
11 12
11 12
11 12
为了测试这些行,我使用的是11 12\r?\n+
。它在rubular正则表达式检查器中工作正常但在http://www.regexplanet.com/advanced/java/index.html中失败。我尝试的另一个替代方案是(11 12.\r?\n){3,7}
,它在rubular regex检查中工作正常但在regexplanet Java中失败了。任何人都可以告诉我如何检查这种具有重复模式的正则表达式?
答案 0 :(得分:2)
11 12\r?\n+
匹配11 12
,然后是可选的回车符,后跟一个或多个换行符(没有回车符)。这显然不是你想要的。
(11 12.\r?\n){3,7}
匹配11 12
,后跟一个除换行符之外的其他字符,然后是可选的CR和换行符;所有这些都重复了3到7次。所以点在这里是错误的。请改用:
(11 12\r?\n){3,7}
最后,请注意,由于字符串转义规则,您通常需要在Java正则表达式中加倍反斜杠(尽管在这种特殊情况下,您会没事,因为\r
和\n
恰好有效作为字符串转义):
Pattern regex = Pattern.compile("(11 12\r?\n){3,7}"); // works the same as
Pattern regex = Pattern.compile("(11 12\\r?\\n){3,7}");