Извлечение текста из многострочной строки с использованием Perl - PullRequest
5 голосов
/ 20 июля 2011

У меня есть строка, которая охватывает несколько строк.Мне нужно извлечь текст между двумя строками.Например:

Start Here Some example
text covering a few
lines. End Here

Мне нужно извлечь строку, Start Here Some example text covering a few lines.

Как мне это сделать?

Ответы [ 3 ]

25 голосов
/ 20 июля 2011

Используйте модификатор /s regex, чтобы рассматривать строку как одну строку :

/ s Обрабатывать строку как одну строку.То есть изменить "."соответствовать любому символу, даже символу новой строки, который обычно не соответствует.

  $string =~ /(Start Here.*)End Here/s;
  print $1;

Это будет захватывать до последний End Here, в случае, если он появляетсяболее одного раза в вашем тексте.

Если это не то, что вы хотите, то вы можете использовать:

  $string =~ /(Start Here.*?)End Here/s;
  print $1;

Это остановит сопоставление при самом первом появлении End Here.

9 голосов
/ 20 июля 2011
print $1 if /(Start Here.*?)End Here/s;
1 голос
/ 22 февраля 2013

Не будет ли правильный модификатор для обработки строки одной строкой (? S), а не (/ s)? Я уже давно борюсь с подобной проблемой, и RegExp Tester, встроенный в слушатель JMeter View Results Tree, показывает мой экстрактор регулярных выражений с регулярным выражением

(?s)<FMSFlightPlan>(.*?)</FMSFlightPlan>

совпадений

<FMSFlightPlan>
C87D
AN NTEST/GL 
- FPN/FN/RP:DA:GCRR:AA:EIKN:F:SAMAR,N30540W014249.UN873. 
BAROK,N35580W010014..PESUL,N40529W008069..RELVA,N41512W008359.. 
SIVIR,N46000W008450..EMPER,N49000W009000..CON,N53545W008492 
</FMSFlightPlan>

в то время как регулярное выражение

(?s)<FMSFlightPlan>(.*?)</FMSFlightPlan>

не соответствует. Другие тестеры регулярных выражений показывают тот же результат. Однако, когда я пытаюсь выполнить скрипт, я получаю сообщение об ошибке Beanshell Assertion:

Сообщение об ошибке подтверждения: org.apache.jorphan.util.JMeterException: Ошибка при вызове метода bsh: eval Полученный файл: встроенная оценка: `` import java.io. *; // записать результаты данных в файл outfile = "/ Users / Dani... '' Ошибка разбора токена: Лексическая ошибка в строке 12, столбец 380. Обнаружено:" \ n "(10),

Так что с моим определенно что-то не так. В любом случае, просто предложение

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