Трудности с поиском регулярного выражения Java, эквивалентного регулярному выражению JavaScript - PullRequest
0 голосов
/ 27 июня 2018

Итак, я пытаюсь сделать следующее:

У меня есть строка:

Special Skills:
someText
could range 
through multiple lines

Special Abilities:
another
someText

Background:
multiline
text

Мне уже удалось придумать следующее регулярное выражение. Он отлично работает в JavaScript согласно regexr.com, но не в Java, согласно встроенным в Intellij Check-Regex и freeformatter.com.

Special Abilities:\n(.*\n)+?(Special Skills:|Background:)

Выражение должно, прежде всего, извлечь

Special Skills:
someText
could range 
through multiple lines

Помните, что оба раздела «Специальные способности» и «Фон» являются необязательными.

Поскольку я застрял здесь, любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете добавить привязку конца строки (строки) $ в качестве альтернативы группе чередования в конце шаблона, убедитесь, что . соответствует возврату каретки с вложенным (?d) Pattern.UNIX_LINES пометьте и оберните (.*\n)+? группой захвата, чтобы захватить весь текст, который ей соответствует, в 1 группу (и (.*\n)+? можно изменить в группу без захвата):

(?d)Special Abilities:\r?\n((?:.*\n)*?)(Special Skills:|Background:|$)

См. это демо регулярных выражений .

Детали

  • (?d) - . теперь соответствует любому символу, кроме новой строки
  • Special Abilities: - буквальный текст
  • \r?\n - конец строки CRLF или LF
  • ((?:.*\n)*?) - Группа 1: ноль или более, но как можно меньше повторений 0+ символов, отличных от символа LF, а затем символа LF
  • (Special Skills:|Background:|$) - любой из трех вариантов: Special Skills:, Background: или конец строки ($).

Альтернативное выражение:

(?ms)Special Abilities:\r?\n(.*?)(^Special Skills:|^Background:|\Z)

См. это демо регулярных выражений

Здесь (?ms) определяет режимы многострочного и точечного (здесь ^ будет соответствовать началу строки, а . будет соответствовать всем символам). Вместо $ нам нужно использовать \Z - конец строки привязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...