如何将 [link](#) 替换为 <a href="#">link</a>?

how can I replace [link](#) to <a href="#">link</a>?

我想做类似 Whosebug 的事情。实际上将此样式 []() 更改为此样式 <a href=""></a>。这是我的尝试:

$str = '[link](#)';
$str = str_replace('[','<a href="',$str);     // output: <a href="link](#)
$str = str_replace(']','">',$str);            // output: <a href="link">(#)
$str = str_replace('(','',$str);              // output: <a href="link">#)
$str = str_replace(')','</a>',$str);          // output: <a href="link">#</a>

但是现在,我需要将 link 更改为 #,我该怎么做?

你想看看preg_replace(),有了这个你可以用正则表达式来替换它,例如

$str = preg_replace("/\[(.*?)\]\((.*?)\)/", "<a href=''></a>", $str);

正则表达式解释:

\[(.*?)\]\((.*?)\)
  • \[ 匹配字符 [ literally
  • 第一个捕获组 (.*?)
    • .*? 匹配任何字符(换行符除外)
      • 量词:*?介于零次和无限次之间,次数越少越好,按需扩展[懒惰]
  • \] 字面上匹配字符 ]
  • \( 匹配字符 ( literally
  • 第 2 个捕获组 (.*?)
    • .*? 匹配任何字符(换行符除外)
      • 量词:*?介于零次和无限次之间,次数越少越好,按需扩展[懒惰]
  • \) 字面上匹配字符 )