Perl регулярное выражение вопрос - PullRequest
1 голос
/ 16 марта 2011

как построить регулярное выражение Perl, которое будет соответствовать шаблону, подобному этому

Начинается с XXX и заканчивается AAA

(1) в одну строку
(2) охватывая много строк

Пожалуйста, помогите, я новичок в регулярных выражениях:)

Ответы [ 4 ]

4 голосов
/ 16 марта 2011

одна строка:

/XXX.*?AAA/  # example "foo XXX bar AAA egg" will match "XXX bar AAA"

многострочный:

/XXX.*?AAA/s

знак вопроса ? определяет жадность вашего выражения.Если вам нужен последний AAA, вы должны удалить ?.Если вам нужен первый AAA после XXX, тогда он должен быть там.

1 голос
/ 16 марта 2011

Вам не обязательно нужно один регулярное выражение.Для одной строки:

say 'I matched.' if m/^AAA/ and m/XXX$/;

Для мультилинии:

say 'I matched.' if m/\AAAA/m and m/XXX\z/m;
  • \A => абсолютное начало (^ это только начало a строка.)
  • \z => абсолютное окончание (хотя вы можете использовать \Z, если хотите конец, и вам все равно, есть разделитель записей или нет.
  • /m => многострочный переключатель

Однако есть также substr, который работает для любого с точными строками:

say 'I matched.' if substr( $_, 0, 3 ) eq 'AAA' and substr( $_, -3 ) eq 'XXX';
1 голос
/ 16 марта 2011

Только в пределах одной строки:

/XXX.*AAA/

Объединение нескольких строк:

/XXX.*AAA/s

Используйте дополнительный /g для сопоставления всех вхождений.

1 голос
/ 16 марта 2011

Итак:

/^XXX.*AAA$/s

Модификатор s обрабатывает ввод как одну строку (. соответствует также новой строке).

Ссылка

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