PHP preg_replace экранирует амперсанд в регулярном выражении обратной ссылки

Хорошо, я проверил и посмотрел, но сегодня мой SearchFU не силен. Я сталкиваюсь с ошибкой с обратными ссылками в некоторых регулярных выражениях preg_replace('~$\s*<div>([^<]*?)</div>$\s*~me', '\1', $source); Я мог бы действительно использовать руку с. Выражение находит <div> тэги и возвращает только контент, удаляющий тэг и заключающий перевод строки. то есть:

<td>
<div>some value</div>
</td>

становится

<td>some value</td>

Все работает нормально пока <div>&nbsp;</div> что приводит к:

Parse error: syntax error, unexpected '&' in D:\wamp\www\processfile.php(18)
: regexp code on line 1 Call Stack: 0.0010 143600 1. {main}()
D:\wamp\www\processfile.php:0 0.0350 170328 2. preg_replace()
D:\wamp\www\processfile.php:18 Fatal error: preg_replace(): Failed evaluating
code:   in D:\wamp\www\processfile.php on line 18 Call Stack: 0.0010 143600
1. {main}() D:\wamp\www\processfile.php:0 0.0350 170328 2. preg_replace()
D:\wamp\www\processfile.php:18

Если я удаляю обратную ссылку \ 1, выражение удачно удалит все содержимое тегов div, но, похоже, захочет проанализировать его как новое выражение.

Есть ли способ обойти это, или я должен просто предварительно обработать &перед тем, как эта строка будет выполнена?

0

Решение

Это e модификатор в конце вашего регулярного выражения. Это вызывает замену eval()«Ред. Убери это:

preg_replace('~$\s*<div>([^<]*?)</div>$\s*~m', '\1', $source);

Увидеть PHP документы для модификаторов PCRE.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]