#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"
это может сработать