preg_match работает в регулярных выражениях, а не в php - PullRequest
0 голосов
/ 27 января 2009

Хорошо, у меня есть это регулярное выражение, которое я создал, и оно прекрасно работает в RegexBuddy, но не тогда, когда я загружаю его в php. Ниже приведен пример этого.

Используя RegexBuddy, я могу заставить его работать с этим:

\[code\](.*)\[/code\]

И, проверяя совпадение точек с новой строкой, я добавил регистр без учета регистра, но он работает и так.

Вот php:

$q = "[code]<div>html code to display on screen</div>[/code]";

$pattern = '/\[code\](.*)\[/code\]/si';

$m = preg_match($pattern, $q, $code);

Итак, вы можете видеть, что я использую [code] [/ code], а затем, как только я смогу извлечь это, я запусту htmlentities (), чтобы отобразить вместо рендеринга HTML-код.

Ответы [ 5 ]

2 голосов
/ 27 января 2009

При переносе вашего регулярного выражения из RegexBuddy в PHP либо создайте фрагмент исходного кода на вкладке «Использование», либо нажмите кнопку «Копировать» на панели инструментов в верхней части и выберите «Копировать как строку preg PHP». Затем RegexBuddy автоматически добавит разделители и флаги, которые нужны PHP, не оставляя ничего без экранирования.

2 голосов
/ 27 января 2009

Вы включаете косую черту в середине вашего паттерна (/ code). Либо избежать этого, либо разделить ваш шаблон чем-то другим (я предпочитаю!).

1 голос
/ 27 января 2009

Это потому, что вы не избежали закрытия маркера /

Избавление от обратной косой черты также не повредит:

$pattern = "/\\[code\\](.*)\\[\\/code\\]/si";

PHP позволяет вам выбирать любые символы в качестве разделителя RegEx, поэтому я часто буду использовать символ, который также не используется в регулярном выражении, например @.

$pattern = "@\\[code\\](.*)\\[/code\\]@si";
0 голосов
/ 27 января 2009

Это сработало:

$pattern = '/\[code\](.*)\[\/code\]/si';
0 голосов
/ 27 января 2009

Вам необходимо экранировать косую черту в / code

$pattern = '/\[code\](.*)\[\/code\]/si';

Также обратите внимание, что совпадения хранятся в $ code, а не в $ m

Редактировать: Избито: p

...