2015-12-08 2 views
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>.

В моем регулярном выражении я делаю жадный матч (.*), но я также пробовал использовать (.*?), который выводит тот же результат.

Я убегаю от каждого специального персонажа. Специальные символы регулярного выражения: . \ + * ? [^] $ () { } = ! < > | : -.

+1

Браузер обрабатывает '' как тег, поэтому он не отображается. –

+0

Как вы проверяете свой результат? Потому что, если вы отправляете в браузер, вы не увидите закрытие элемента ''. – miken32

+0

В моем вопросе я указал, что использую phptester (со ссылкой на него). – Kira

ответ

2

Ваше регулярное выражение хорошо, проблема заключается в том, что браузер не отображает закрывающий тег. Попробуйте это:

<?php 
$a = '##foobar(a b, c d)@@f()</td>a</td>'; 
$b = preg_replace('/foobar.*?\)(.*)\<\/td\>$/', 'blah(this)$1', $a); 

echo htmlentities($b); 
+0

** Примечание: ** Вам не нужно 'htmlentities()' для того, что вы делаете. Это просто, чтобы вы могли видеть его в браузере только для тестирования. –

2

Вместо использования phptester, вы можете использовать PHP в интерактивном режиме с помощью командной строки:

php -a 

, а затем ввести в интерактивной оболочке, очень похожи на питон.

Тестирование вашего кода с помощью этого инструмента, мы можем видеть, что ваше регулярное выражение в порядке.

$ php -a 
Interactive shell 

php > $a='##foobar(a b, c d)@@f()</td>a</td>'; 
php > echo preg_replace('/foobar.*?\)(.*)\<\/td\>$/', 'blah(this)$1', $a); 
##blah(this)@@f()</td>a 
php > 
+0

Я не знал об этой интерактивной оболочке, спасибо. – Kira

Смежные вопросы