[英]PHP Preg_replace() pattern to replace only proper text and not image alt/src text
我正在尝试使用链接<a href='/harvey'>Harvey</a>
替换字符串"Harvey"
首次出现。
我使用"/(?<!(src|alt|href)=\\")".$internal_links_row['key_phrase']."/i"
作为搜索模式,仅当存在完全匹配项时才跳过匹配alt / src模式。
例如:它匹配alt="Harvey"
。 但这与alt="James Stewart in Harvey",
不匹配alt="James Stewart in Harvey",
我需要跳过双引号内的所有事件,并且不能使用strip_tags
请帮助我,谢谢
为什么不使用str_replace()
$ans = str_replace('href="/harvey", 'href="/some_string"', $subject);
尝试使用:
Harvey(?![^<>]*>)
这可以确保前面没有闭合的尖括号,表明它位于HTML标记内。
如果效果不佳,请改用积极的前瞻:
Harvey(?=[^<>]*(?:<|\Z))
这可以确保在标签的前面或字符串的末尾有一个开口的尖括号。
转换为:
"/".$internal_links_row['key_phrase']."(?![^<>]*>)/i"
"/".$internal_links_row['key_phrase']."(?=[^<>]*(?:<|\Z))/i"
分别
编辑:根据评论:
"~".$internal_links_row['key_phrase']."(?=[^<>]*(?:<(?!/a)|\Z))~i"
^ ^^^^^^ ^
我更改了定界符,并添加了负面的前瞻性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.