我想要做的是从我正在解析的简单文本中获取属性值。我希望能够在引号内包含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>'
这是我试用和错误regex的程度。
$value_regex = "/^\"(.+?)\"/"
if (preg_match($value_regex, $line, $matches))
$result = $matches[1];
非常感谢你!
答案 0 :(得分:0)
您可以使用负向lookbehind来避免匹配转义引号:
(?<!\\)"(.+?)(?<!\\)"
此处(?<!\\)
负面反对会避免匹配\"
。
但是我会提醒您使用正则表达式解析HTML,最好使用DOM。
PHP代码:
$value_regex = '~(?<!\\\\)"(.+?)(?<!\\\\)"~';
if (preg_match($value_regex, $line, $matches))
$result = $matches[1];