Java,无法让正则表达式工作

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>))\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该与 中包含的任何内容匹配\'<Anhang>\'

\n\n

它在 JavaScript 引擎中工作正常,但我无法让它在 Java 中工作。

\n\n

在这里,我使用 JavaScript 引擎在regex101上针对此文本进行了测试:

\n\n
BLALBLA BLA BLA <Anhang> \ngonegone gone gone ,os .psd\n</Anhang> ajdajadw\n
Run 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>))\n
Run Code Online (Sandbox Code Playgroud)\n

Jor*_*dan 5

您的正则表达式过于复杂,并且似乎格式也错误。看起来您只想要标签之间的文本<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% 的情况下有效”正则表达式导致代码中出现错误的风险。