Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用链接替换word的PHP正则表达式_Php_Regex - Fatal编程技术网

用链接替换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>";
}