Я хочу получить значение атрибута из простого текста, который я анализирую. Я хочу иметь возможность содержать 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];
Заранее большое спасибо!
Вы можете использовать отрицательный вид сзади, чтобы избежать совпадения с кавычками:
(?<!\\)"(.+?)(?<!\\)"
Вот (?<!\\)
является негативный взгляд сзади это позволит избежать соответствия \"
,
Однако я бы предостерег вас от использования регулярных выражений для разбора HTML, лучше для этого использовать DOM.
PHP-код:
$value_regex = '~(?<!\\\\)"(.+?)(?<!\\\\)"~';
if (preg_match($value_regex, $line, $matches))
$result = $matches[1];
Других решений пока нет …