我正在尝试将第一次出现的字符串"Harvey"
替换为链接<a href='/harvey'>Harvey</a>
我使用"/(?<!(src|alt|href)=\")".$internal_links_row['key_phrase']."/i"
作为搜索模式,它只在alt / src模式中存在完全匹配时跳过匹配。
对于Eg:它匹配alt="Harvey"
。但它与alt="James Stewart in Harvey",
我需要跳过双引号中的每一个事件,我不能使用strip_tags
请帮帮我们, 感谢
答案 0 :(得分:1)
为什么不使用str_replace()
$ans = str_replace('href="/harvey", 'href="/some_string"', $subject);
答案 1 :(得分:1)
尝试使用:
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"
^ ^^^^^^ ^
我更改了分隔符并添加了一个否定的预测。