我正在尝试使用Java regexp来匹配跨越多行的模式.该模式有一行以'A'开头,后跟正好50个字符,然后是一行或多行以'B'开头,后跟正好50个字符:
A... // exactly 50 chars after the A
B...
B...
Run Code Online (Sandbox Code Playgroud)
但是,Java正则表达式似乎并不支持这一点.
这是一个适用于A和B一行的正则表达式:
A.{50}[\\n[\\n\\r]]B.{50}[\\n[\\n\\r]]
Run Code Online (Sandbox Code Playgroud)
这是相同的正则表达式修改,以找到一个或多个B行:
A.{50}[\\n[\\n\\r]][B.{50}[\\n[\\n\\r]]]+
Run Code Online (Sandbox Code Playgroud)
但是,此正则表达式仅查找第一个B行上的前导B字符.
我[\\n[\\r\\n]]用来处理DOS和UNIX换行.启用MULTILINE模式不会影响结果.
问题似乎是当我使用带有'+'的括号将B行的正则表达式转换为可捕获多行的字符类时.
有没有关于Java regexp的东西,不允许'.' 字符或花括号来指定精确的行长度?
在以下正则表达式中:
(A[^\r\n]{50}(\r\n|\n))(B[^\r\n]{50}(\r\n|\n))+
Run Code Online (Sandbox Code Playgroud)
我曾经[^\r\n]匹配任何不是\r或 的字符\n。[\d]例如,如果您有数字,则可以将其替换为。
请参阅http://www.myregextester.com/?r=b7c3ca56
在示例中,正则表达式匹配除最后一行之外的所有内容。