繁体   English   中英

PHP Preg_replace()模式仅替换适当的文本,而不替换图像alt / src文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM