Проблема регулярного выражения PHP и ввода

#php #regex #enter

#php #регулярное выражение #введите

Вопрос:

Код


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

Проблема


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

Пример:

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

Чего я хочу


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

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

Комментарии:

1. что означает «регулярное выражение не работает»?

2. Не могли бы вы, возможно, немного прояснить, какой части строки вы хотите, чтобы регулярное выражение соответствовало?

3. @Andrea; Не работает, означает, что регулярное выражение завершается ошибкой, не возвращает значений. Я думал, что это достаточно ясно (проверяя ответы, я считаю, что это так).

4. @Isiscode: Моя проблема заключалась не в прямом сопоставлении. Это было так же, как я написал в примере кода, когда я перехожу к новой строке, регулярное выражение становилось ЛОЖНЫМ, не возвращая значений.

Ответ №1:

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

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

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

Ответ №2:

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

Ответ №3:

Используйте s модификатор шаблона:

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

Ответ №4:

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

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

Ответ №5:

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