1

我正在尝试"Harvey"用链接替换第一次出现的字符串<a href='/harvey'>Harvey</a>

"/(?<!(src|alt|href)=\")".$internal_links_row['key_phrase']."/i"用作搜索模式,它仅在 alt/src 模式中存在完全匹配时才跳过匹配。

例如:它匹配alt="Harvey". 但它不匹配alt="James Stewart in Harvey",

我需要跳过双引号中的每一个出现,我不能使用strip_tags

请各位帮帮我,谢谢

4

2 回答 2

1

为什么不使用str_replace()

$ans = str_replace('href="/harvey", 'href="/some_string"', $subject);
于 2013-10-14T05:08:06.787 回答
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"
 ^                                                  ^^^^^^     ^

我更改了分隔符并添加了一个负前瞻。

于 2013-10-14T05:15:37.357 回答