как заменить полное совпадение на preg_replace? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть это регулярное выражение:

https://regex101.com/r/Eaj73B/5

Как видно, оно соответствует группе 1 и группе 2 из заданной строки.

Но когда я использую preg_replace в php, он заменяет не группу 2 полного совпадения:

preg_replace('/\[(\w+)[^\]]*]([^\[]+\[\\?\/\1\])?/', '', $string)

Как заменить полное совпадение?

ОБНОВЛЕНИЕ:

В тестере regex101.com регулярное выражение действительно хорошо работает. Но на реальном PHP сервере он работает не так, как ожидалось. См. Ниже:

Протестировано на 2 разных серверах с php7 .2 с помощью этого метода, но это результат:

    public function TestReplace(){

    $string = 'x[embed]some text or url[/embed]x';

    return preg_replace('/\[(\w+)[^\]]*]([^\[]+\[\\?\/\1\])?/', '', $string);

}

возвращает:

xsome текст или url [/ embed] x

Таким образом, он заменяет только [embed] на реальном php7 .2 сервере. Я действительно не знаю, что я делаю здесь не так ...

1 Ответ

0 голосов
/ 27 апреля 2020

Я нашел ответ! Кажется, что php preg_replace не поддерживает некоторые функции регулярных выражений, поэтому мне пришлось немного изменить регулярное выражение.

Этот работает для php:

preg_replace('/\[\w+[^\]]*]([^\[]+\[[\\a-zA-Z\/]+\])?/', '', $string);

Благодаря этот пост: PHP preg_replace не жадная проблема .

Итак, мой вывод таков, что такие живые тестеры, как www.phpliveregex.com, не всегда надежны.

...