1
У меня возникли некоторые проблемы, чтобы сделать следующий код для вывода, что я ожидал:PHP preg_replace регулярное выражение, чтобы удалить последний тег
<?php
$a='##foobar(a b, c d)@@f()</td>a</td>';
echo preg_replace('/foobar.*?\)(.*)\<\/td\>$/', 'blah(this)$1', $a);
Ожидаемый результат должен быть ##blah(this)@@f()</td>a
, однако его выход ##blah(this)@@f()a
(с использованием phptester) ,
Мне не имеет смысла, как он выводит последние a
, но не предыдущий тег </td>
. Я хочу удалить только тег </td>
.
В моем регулярном выражении я делаю жадный матч (.*)
, но я также пробовал использовать (.*?)
, который выводит тот же результат.
Я убегаю от каждого специального персонажа. Специальные символы регулярного выражения: . \ + * ? [^] $ () { } = ! < > | : -
.
Браузер обрабатывает '' как тег, поэтому он не отображается. –
Как вы проверяете свой результат? Потому что, если вы отправляете в браузер, вы не увидите закрытие элемента '
В моем вопросе я указал, что использую phptester (со ссылкой на него). – Kira
ответ
Ваше регулярное выражение хорошо, проблема заключается в том, что браузер не отображает закрывающий тег. Попробуйте это:
источник
2015-12-08 23:08:00
** Примечание: ** Вам не нужно 'htmlentities()' для того, что вы делаете. Это просто, чтобы вы могли видеть его в браузере только для тестирования. –
Вместо использования
phptester
, вы можете использовать PHP в интерактивном режиме с помощью командной строки:, а затем ввести в интерактивной оболочке, очень похожи на питон.
Тестирование вашего кода с помощью этого инструмента, мы можем видеть, что ваше регулярное выражение в порядке.
источник
2015-12-08 23:13:48
Я не знал об этой интерактивной оболочке, спасибо. – Kira
Смежные вопросы