Obl*_*ial 0 java regex pattern-matching
我在网上看到了以下正则表达式,并想将其实现到我的 Java 应用程序中(使用 java.util.regex)。
\n\n(?<=(<Anhang>))(\\w|\\d|\\n|[().,\\-:;@#$%^&*\\[\\]"\'+\xe2\x80\x93/\\/\xc2\xae\xc2\xb0\xe2\x81\xb0!?{}|`~]| )+?(?=(<\\/Anhang>))\nRun Code Online (Sandbox Code Playgroud)\n\n这应该与 中包含的任何内容匹配\'<Anhang>\'。
它在 JavaScript 引擎中工作正常,但我无法让它在 Java 中工作。
\n\n在这里,我使用 JavaScript 引擎在regex101上针对此文本进行了测试:
\n\nBLALBLA BLA BLA <Anhang> \ngonegone gone gone ,os .psd\n</Anhang> ajdajadw\nRun Code Online (Sandbox Code Playgroud)\n\n产生以下结果:
\n\n\n\n所以我继续尝试在“ Java正则表达式测试器”中使用它,但它要么与文本不匹配,要么存在语法错误。\n我知道我必须转义某些字符,但我只是没有让它工作,这是我尝试过的:
\n\n(?<=(<Anhang>))(\\\\w|\\\\d|\\\\n|[().,\\-:;@#$%^&*\\[\\\\]\\"\'+\xe2\x80\x93/"/\xc2\xae\xc2\xb0\xe2\x81\xb0!?{}|`~]| )+?(?=(<\\"Anhang>))\n\n(?<=(<Anhang>))(\\\\w|\\\\d|\\\\n|[().,\\-:;@#$%^&*\\[\\\\]\\"\'+\xe2\x80\x93/"/\xc2\xae\xc2\xb0\xe2\x81\xb0!?\\{\\}|`~]| )+?(?=(<\\"Anhang>))\n\n(?<=(<Anhang>))(\\\\w|\\\\d|\\\\n|[().,\\\\\\\\-:;@#$%^&*\\[\\\\]\\"\'+\xe2\x80\x93/"/\xc2\xae\xc2\xb0\xe2\x81\xb0!?\\{\\}|`~]| )+?(?=(<\\"Anhang>))\nRun Code Online (Sandbox Code Playgroud)\n
您的正则表达式过于复杂,并且似乎格式也错误。看起来您只想要标签之间的文本<Anhang>,所以也许尝试一些更简单的方法,如下所示:
Pattern regex = Pattern.compile(".*<Anhang>(.+?)</Anhang>.*", Pattern.DOTALL);
String s = "BLALBLA BLA BLA <Anhang> \n" +
"gonegone gone gone ,os .psd\n" +
"</Anhang> ajdajadw";
Matcher m = regex.matcher(s);
if (m.matches()) {
String capturedGroup = m.group(); // This is the text inside the tags
}
Run Code Online (Sandbox Code Playgroud)
创建模式并指定Pattern.DOTALL而不是使用String.matches()很重要,因为它允许.匹配换行符。
然而,我认为值得一提的是,正则表达式通常不是用来解析 XML 或 HTML 的错误工具。有一些自定义解析库,我建议您研究一下。它避免了“在 99% 的情况下有效”正则表达式导致代码中出现错误的风险。
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |