用链接替换word的PHP正则表达式
在这种情况下,我解析一个文本体并用链接替换某些短语。然后我需要重新解析字符串,用链接替换第二组短语。问题就出现在这一点上,第二组中的某些单词或短语可以是第一组中已经替换的短语的子串 示例:字符串“布拉布拉布拉大峡谷布拉”在第一次通过后将变为“布拉布拉布拉用链接替换word的PHP正则表达式,php,regex,Php,Regex,在这种情况下,我解析一个文本体并用链接替换某些短语。然后我需要重新解析字符串,用链接替换第二组短语。问题就出现在这一点上,第二组中的某些单词或短语可以是第一组中已经替换的短语的子串 示例:字符串“布拉布拉布拉大峡谷布拉”在第一次通过后将变为“布拉布拉布拉布拉”。第二步可能会尝试用一个链接替换“canyon”一词,因此生成的断开的文本将是:“废话废话废话” 因此,我一直在尝试使用preg_replace和正则表达式来防止嵌套的标记发生——只替换链接中尚未包含的文本。我已经尝试使用正则表达式,根据文
布拉”。第二步可能会尝试用一个链接替换“canyon”一词,因此生成的断开的文本将是:“废话废话
废话”
因此,我一直在尝试使用preg_replace和正则表达式来防止嵌套的
标记发生——只替换链接中尚未包含的文本。我已经尝试使用正则表达式,根据文本中是否有
标记进行检查,但无法使这些正则表达式正常工作
也许需要另一种方法
非常感谢!
Dave这可能适用于所有通行证:
$string = preg_replace('/([^>]|^)grand canyon\b/','$1<a href=#>grand canyon</a>',$string);
$string=preg_replace('/([^>]|^)grand canyon\b/,'$1',$string);
编辑:假设第二遍的文本中包含“amazonas>grand canyon”之类的内容时,您可以使用正则表达式,例如:
(<a[^>]*>.*?</a>)|grand
(”;
}
这看起来非常接近魔兽世界,谢谢,这正是我们所需要的!我刚刚发布了该解决方案的PHP版本来回答您的问题。可能是
$result = preg_replace_callback('%(<a[^>]*>.*?</a>)|grand%', compute_replacement, $subject);
function compute_replacement($groups) {
// You can vary the replacement text for each match on-the-fly
// $groups[0] holds the regex match
// $groups[n] holds the match for capturing group n
if ($groups[1]) {
return $groups[1];
} else {
return "<a href='#'>$groups[0]</a>";
}