我需要对看起来像这样的字符串进行一些清理:
$author_name = '<a href="http://en.wikipedia.org/wiki/Robert_Jones_Burdette>Robert Jones Burdette </a>';
请注意,href标记没有结束引号 - 我在这些文件的大表上使用DOMParser来提取文本,然后就此进行了抨击。
我想查看$ author_name;
中的字符串如果第一个&gt;没有“在它之前,用”&gt;替换它正确关闭标签。如果没问题,只需跳过并执行下一步。一定不要更换第二个&gt;一点都不。
使用php正则表达式,我找不到一个可行的解决方案 - 我可以删除整个事情并检查它的部分,但这会很慢,我认为必须有一个正则表达式可以做我想要的
TIA
答案 0 :(得分:1)
你可以做的是,找到第一个结束标记,有或没有双引号(“),并将其替换为(”&gt;):
$author_name = preg_replace('/(.+?)"?>(.+?)/', '$1">$2', $author_name);
答案 1 :(得分:0)
http://www.barattalo.it/html-fixer/
下载,然后将其包含在您的PHP中。 其余的很简单:
$dirty_html = ".....bad html here......";
$a = new HtmlFixer();
$clean_html = $a->getFixedHtml($dirty_html);
人们想要使用正则表达式是很常见的,但你必须记住HTML is not regular。