Как я могу использовать регулярное выражение для замены символа, который находится внутри двух других конкретных символов? - PullRequest
0 голосов
/ 27 августа 2009

Я работаю над реализацией способа разрешения HTML в поле, которое у меня есть с PHP. Символы сохраняются в базе данных по мере их ввода, поэтому, когда я распечатываю их на экране позже, я хочу, чтобы HTML соблюдался (безопасность здесь не проблема, поэтому, пожалуйста, не делайте так). Сейчас мне нужен способ изменить любые &quot; экземпляры на надлежащие символы ", но только в том случае, если они попадают в объявление HTML (т.е. символы < и >). Когда он не находится внутри этих символов, его не следует менять.

Как правильно сделать что-то подобное с регулярным выражением?

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

Попробуйте это:

$str = preg_replace('/&quot;(?=[^<>]*+>)/', '"', $str);

Из вашего описания я понимаю, что вы имеете в виду «внутри HTML тега » ( объявление на самом деле ничего не значит в этом контексте). Я также предполагаю, что внутри тега не может быть символов '<' или '>' (поскольку они являются допустимыми в указанных значениях атрибутов).

Взгляд в будущее (?=[^<>]*+>) утверждает, что впереди есть правая угловая скобка, а между здесь и там нет никаких других угловых скобок. Предполагая, что каждая угловая скобка является частью сбалансированной пары, это должно означать, что текущая позиция находится внутри тега HTML.

0 голосов
/ 27 августа 2009

Как то так, чтобы найти теги? X является символом, но может быть заменен строкой.

<[^>]*X[^>]*>

Практический пример, который находит ссылки, начинающиеся с <a href:

<a href="([^"]*)"[^>]*>.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...