PHP Preg_replace()模式只替换正确的文本而不替换图像alt / src文本

时间:2013-10-14 04:46:14

标签: php regex preg-replace lookahead negative-lookahead

我正在尝试将第一次出现的字符串"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

请帮帮我们, 感谢

2 个答案:

答案 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"
 ^                                                  ^^^^^^     ^

我更改了分隔符并添加了一个否定的预测。