Подтвердить что ты не робот

Текст соответствия RegEx между разделителями

Мне нужно регулярное выражение, которое извлекает текст внутри разделителя, но я проблема с извлечением значения внутри разделителя [DATA n] и [END DATA]

Здесь мое регулярное выражение

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])

Здесь примерные данные, которые я хочу сопоставить

Некоторые тексты здесь

[DATA 1]
data one 
some more data
[END DATA]
[DATA 2]
data two
more data
data
[END DATA]
[DATA n]
more data 
data 
[END DATA]
4b9b3361

Ответ 1

Похоже, вы используете функции регулярных выражений, такие как lookbehind и lookahead, когда они вам действительно не нужны. Попробуйте:

\[DATA\s+\d+\](.*?)\[END DATA\]

В этом регулярном выражении есть только одна группа захвата (.*?). После этого результат, который вы ищете, должен быть в группе захвата 1.

Обратите внимание, что я использовал нежеланное совпадение .*?, которое будет совпадать до первого следующего экземпляра [END DATA]. Без этого, если вы используете только .*, вы будете записывать все до последнего [END DATA].

Ответ 2

В regex текст [ между ] называется символьным классом, а двигатели регулярных выражений будут соответствовать только одному символов между скобками. Вам просто нужно поставить обратную косую черту, чтобы сделать их буквальными:

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])

Ответ 3

Специальный символ точки не соответствует символам новой строки по умолчанию. Убедитесь, что вы используете однострочный модификатор для вашей реализации регулярного выражения или используйте [\S\s]*? вместо .*?

См. http://www.regular-expressions.info/modifiers.html и http://www.regular-expressions.info/dot.html для деталей.

Ответ 4

Используйте символ\для выхода.

\[DATA\s\d\]+([^\[]+)\[[^\]]+\]