PHP 在 link 标签中做 2 preg_replace

PHP do 2 preg_replace in link tag

我正在尝试制作一个多preg_replace,不确定那是否是正确的功能。

我想要这个结果

[link]www.mynewhomepage.com(我的新主页)[/link]

成为<a href=mynewhomepage.com>My New homepage</a>

我制作了这段代码,它给了我我想要的东西

   $string = 'i have made a new homepage visit [link]http://myhomepage.dk(My New homepage)[/link]';
$find = array('#\[link\](.+)\[\/link\]#iUs', '#\((.+)\)#iUs');
$replace = array('<a href=>', '</a>');
$result = preg_replace($find, $replace, $string);

echo $result;

它给了我这个结果:http://myhomepage.dk>

任何人都可以在我做错事的正确方向上指导或帮助我吗? :)

谢谢你,祝你暑假快乐:)

这应该有效:

\[link\](.*?)\((.*)\)\[\/link\]

https://regexr.com/3sc23

基本上匹配到第一个左括号,也从最后一个括号匹配到末尾。然后将这些片段放入捕获组中以供以后引用。

使用<a href=""></a>作为替代

关于你原来的问题,你的解决方案有这些问题:

对于第一次替换,我们应该使用 <a href="。请注意,我们在 link 的开头使用 ",但目前我们不在末尾添加它。这样,嵌套正则表达式会更容易。

然后,在第二个正则表达式中,我们应该在开头添加 "> 以关闭标签。此外,您根本没有使用捕获的组。那将是替代品:"></a>

也就是把这一行改成:

$replace = array('<a href=>', '</a>');

对此:

$replace = array('<a href="', '"></a>');