从引号内部获取html或文本,包括使用RegEx的转义引号

时间:2014-10-31 13:49:53

标签: php regex parsing lexer

我想要做的是从我正在解析的简单文本中获取属性值。我希望能够在引号内包含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];

非常感谢你!

1 个答案:

答案 0 :(得分:0)

您可以使用负向lookbehind来避免匹配转义引号:

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

RegEx Demo

此处(?<!\\) 负面反对会避免匹配\"

但是我会提醒您使用正则表达式解析HTML,最好使用DOM。


PHP代码:

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