PHP Regex и введите задачу - PullRequest
       9

PHP Regex и введите задачу

0 голосов
/ 28 сентября 2011

Код


(preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#", $string, $matches)

Задача


если я назначу какое-либо значение для $string с помощью ввода, мое регулярное выражение не будет работать.

Пример:

//This doesn't work
$string = '[level-0-]This is a 
test[/level]';
//This works
$string = '[level-0-]This is a test[/level]';

Что я хочу


Я бы хотел, чтобы мое регулярное выражение работало независимо от того, между какими символами (введите и т. Д.).

Я буду рад, если кто-нибудь сможет мне помочь с этим. Я до сих пор не начал изучать регулярные выражения, так что я не очень хорош в этом: (

Ответы [ 5 ]

6 голосов
/ 28 сентября 2011

Вам просто нужен флаг DOTALL /s в вашем регулярном выражении.Это позволяет точке . соответствовать любому символу, включая разрывы строк (что по умолчанию не выполняется).

preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#s", ....

См. Также список флагов PCRE http://php.net/manual/en/reference.pcre.pattern.modifiers.php

2 голосов
/ 28 сентября 2011

Возможно, вам понадобится регулярное выражение для обработки его входных данных в виде одной строки путем добавления флага / s к вашему шаблону.

1 голос
/ 28 сентября 2011

Использовать s Модификатор шаблона:

Если этот модификатор установлен, метасимвол точки в шаблоне соответствует всем символам, включая символы новой строки.Без этого новые строки исключаются.(Ссылка: Возможные модификаторы в шаблонах регулярных выражений )

0 голосов
/ 28 сентября 2011

"Test[.|\n]is[.|\n]a[.|\n]test" это может сработать

0 голосов
/ 28 сентября 2011

это должно работать:

(preg_match_all("#\[level-(.+)-\](.+?)(\b)*(.+?)*\[/level\]#", $string, $matches)
...