Получить HTML или текст из кавычек, включая escape-кавычки с RegEx

Я хочу получить значение атрибута из простого текста, который я анализирую. Я хочу иметь возможность содержать HTML и внутри кавычек, так что именно это заставило меня остановиться.

$line = 'attribute = "<p class=\"qwerty\">Hello World</p>" attribute2 = "value2"'

Я дошел до точки (подстрока), где я получаю значение

$line = '"<p class=\"qwerty\">Hello World</p>" attribute2 = "value2"'

Мое текущее регулярное выражение работает, если в тексте нет экранированных кавычек. Однако, когда я пытаюсь избежать кавычек HTML, это не работает вообще. Кроме того, использование. * Идет до конца второго атрибута.

То, что я пытаюсь получить из приведенной выше строки

$result = '<p class=\"qwerty\">Hello World</p>'

Вот как далеко я продвинулся в своем методе проб и ошибок.

$value_regex = "/^\"(.+?)\"/"
if (preg_match($value_regex, $line, $matches))
$result = $matches[1];

Заранее большое спасибо!

1

Решение

Вы можете использовать отрицательный вид сзади, чтобы избежать совпадения с кавычками:

(?<!\\)"(.+?)(?<!\\)"

RegEx Demo

Вот (?<!\\) является негативный взгляд сзади это позволит избежать соответствия \",

Однако я бы предостерег вас от использования регулярных выражений для разбора HTML, лучше для этого использовать DOM.


PHP-код:

$value_regex = '~(?<!\\\\)"(.+?)(?<!\\\\)"~';
if (preg_match($value_regex, $line, $matches))
$result = $matches[1];
0

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

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

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