在文字中,我想将所有$word
替换为[$word]($word)
(在Markdown中创建一个链接),但前提是它不在链接中。例如:
[$word homepage](http://w00tw00t.org)
应该不成为
[[$word]($word) homepage](http://w00tw00t.org)
。
因此,我需要检查$ word是否介于[和]之间,只有在不是这种情况时才替换。
你能想到一个preg_replace命令吗?
答案 0 :(得分:3)
这并不像你想象的那么简单。在许多情况下,之前的答案会失败。这里应该替换已经不在[]内的每个$字:
$text = preg_replace('/\G((?:[^\[]|\[[^\]]*\])*?)('.$word.')/', '$1[$2]($2)', $text)
如果$ word包含特殊的正则表达式字符,您可能需要preg_quote
它。
示例强>
$text = 'aa foo bb [foo bar](http://example.com) cc foo dd';
$word = 'foo';
$text = preg_replace('/\G((?:[^\[]|\[[^\]]*\])*?)('.$word.')/', '$1[$2]($2)', $text);
echo $text;
输出:
aa [foo](foo) bb [foo bar](http://example.com) cc [foo](foo) dd
答案 1 :(得分:0)
我想
“〜$字(?!。*])〜”
"~$word(?=[^\[\]]*(\[|$))~"
e.g。
$src = "aa foo [ bbb foo xyz ] cc foo dd";
$word = "foo";
print preg_replace("~$word(?=[^\[\]]*(\[|$))~", "[FOO](bar)", $src);