Php 正则表达式捕获引号中的锚文本

Php 正则表达式捕获引号中的锚文本,php,regex,anchor,Php,Regex,Anchor,我正试图想出一个正则表达式来捕捉引用文本的锚。例如: <a href="www.example.com">this is "some quoted anchor text" example</a> <a href="www.example.com">this is “another” example with different quote type</a> 我在这里提出了这个,但它感觉臃肿,在我的php 5.5.9环境中无法正常工作: 我

我正试图想出一个正则表达式来捕捉引用文本的锚。例如:

<a href="www.example.com">this is "some quoted anchor text" example</a>
<a href="www.example.com">this is “another” example with different quote type</a>

我在这里提出了这个,但它感觉臃肿,在我的php 5.5.9环境中无法正常工作:

我相信有更好的方法来捕捉这些被引用的锚文本


编辑:我应该提到我需要修复AMP页面上的错误,这些错误是由于带有引号的锚文本造成的。因此,在这种情况下不可能进行DOM操作。准确地说,我正在使用WorPress内容过滤器,在后端使用preg_替换。

天哪。。。几个小时后,我设法拼凑出一个工作文档解决方案!如果有更干净的方法来保持准确性,我欢迎任何人告诉我

代码:()

$html=nodeValue)){
$remove[]=$a;//收集要删除的节点
}
} 
foreach($bad_a)删除为$bad_a){
$bad_a->parentNode->removeChild($bad_a);//删除目标节点
}
$result=mb_convert_编码($dom->saveHTML(),“UTF-8”,“HTML-ENTITIES”);//对于多字节字符
echo preg_replace(['~^ |$~','~\R+~'],[''',“\n'],$result);//清理和标记,以及连续换行符
输出:

<a href="bla">this should not be captured</a>
<a href="bla">no quotes in anchor text here</a>
<a href="bla">Je commence à avoir mal à la tête</a>


或者,如果您不想搞砸所有这些,这里有一个regex one命令行程序,它将按预期执行:

代码:()


echo preg\u replace(“~

不要使用正则表达式来解析HTML,使用
DOMDocument
@JModi这不是重复的。更具体的是,如果可见文本包含引号,它希望匹配锚的可见文本。拉出锚(请参阅我在那里做了什么?)使用HTML解析器,然后使用正则表达式解析这些内容…在这一点上变得简单多了:类似于:
^.*?[^”]+?*?$
如果文本中只有一个引号:这应该有效:
(?)(?:*?[“”](?:![“”](?:*)(?:*)(?=正如我在编辑中所说,我需要修复由于锚定带引号的文本而导致的AMP页面错误。因此,在这种情况下不可能进行DOM操作。@Barmar如果您知道更好的方法或有任何建议,请告诉我。我对DomDocument巫术的熟练程度较低,但我正在通过做/研究来自学。谢谢您u的正则表达式模式和详细的答案。它应该是在我的后端工作,但由于某些原因,我无法让它与wordpress-的内容过滤器。但无论如何,这是正则表达式我一直在寻找。再次感谢!
<a href="bla">this should not be captured</a>
<a href="bla">no quotes in anchor text here</a>
<a href="bla">Je commence à avoir mal à la tête</a>
echo preg_replace('~<a[^>]*>.*?["“”].*?</a>\R?~u','',$html);