Java, не могу заставить работать регулярное выражение - PullRequest
0 голосов
/ 23 января 2020

Я увидел следующее регулярное выражение в сети и хотел внедрить его в мое приложение Java (используя java .util.regex).

(?<=(<Anhang>))(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~]| )+?(?=(<\/Anhang>))

Это должно соответствовать чему-либо, заключенному в '<Anhang>'.

Он отлично работает на JavaScript движке, но я не могу заставить его работать на Java.

Здесь я протестировал его с JavaScript движком на regex101 против этого текста:

BLALBLA BLA BLA <Anhang> 
gonegone gone gone ,os .psd
</Anhang> ajdajadw

, который привел к следующему результату:

enter image description here

Так что я пошел вперед и попытался использовать его в "Java Regular Expression Tester ", но он либо не соответствует тексту, либо произошла синтаксическая ошибка. Я знаю, что мне нужно избегать определенных персонажей, но я просто не смог заставить их работать, вот что я попробовал:

(?<=(<Anhang>))(\\w|\\d|\\n|[().,\-:;@#$%^&*\[\\]\"'+–/"/®°⁰!?{}|`~]| )+?(?=(<\"Anhang>))

(?<=(<Anhang>))(\\w|\\d|\\n|[().,\-:;@#$%^&*\[\\]\"'+–/"/®°⁰!?\{\}|`~]| )+?(?=(<\"Anhang>))

(?<=(<Anhang>))(\\w|\\d|\\n|[().,\\\\-:;@#$%^&*\[\\]\"'+–/"/®°⁰!?\{\}|`~]| )+?(?=(<\"Anhang>))

1 Ответ

4 голосов
/ 23 января 2020

Ваше регулярное выражение слишком сложное и, по-видимому, также неправильно сформировано. Похоже, вам просто нужен текст между тегами <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
}

Важно создать шаблон и указать Pattern.DOTALL вместо использования String.matches(), поскольку он позволяет . совпадать с символами новой строки.

Однако , я думаю, стоит упомянуть, что регулярное выражение, как правило, не подходит для анализа XML или HTML. Для этого есть пользовательские библиотеки синтаксического анализа, которые я предлагаю вам изучить. Это позволяет избежать риска регулярного выражения «работает в 99% случаев», приводящего к ошибкам в вашем коде.

...