我正在尝试使用PHP的preg_replace
将每种#CODE-123
种令牌替换为/CODE-123
。
除了最后一个细节之外,它的效果非常好,我第二次使用它时需要从字符串中删除#
,但我无法弄清楚如何。
这是我到目前为止所拥有的:
echo preg_replace('/#.*-[0-9]*/i', '[${0}](/${0})', $this->description);
它有效并将#CODE-123替换为[#CODE-123](/#CODE-123)
,但我需要它[#CODE-123](CODE-123)
。
有什么想法吗?谢谢!
答案 0 :(得分:2)
如果您对其进行分组(使用方括号(..)
),则可以单独查找每个
echo preg_replace('/#(.*-[0-9]*)/i', '[${0}](${1})', $this->description);
整个模式将始终由0
(您已经使用过的)识别,第一组由1
识别,等等。您可能需要添加?
来制作模式不贪心。
目前它的工作原理如下:
$text = "hello world #ACODE-123 blabla #BCODE-233";
echo preg_replace('/#(.*-[0-9]*)/i', '[${0}](${1})', $text);
//hello world [#ACODE-123 blabla #BCODE-233](ACODE-123 blabla #BCODE-233)
这很可能不是想要的结果(但有效!)。
$text = "hello world #ACODE-123 blabla #BCODE-233";
echo preg_replace('/#(.*?-[0-9]*)/i', '[${0}](${1})', $text);
// ^-- this is new
//hello world [#ACODE-123](ACODE-123) blabla [#BCODE-233](BCODE-233)