Php 在preg_replace replace参数中使用替换模式
我试图使用PHP的Php 在preg_replace replace参数中使用替换模式,php,regex,Php,Regex,我试图使用PHP的preg_replace来替换\code-123的每一种标记 除了最后一个细节外,它工作得非常好,我需要在第二次使用它时从字符串中删除#,但我不知道如何使用它 以下是我目前掌握的情况: echo preg_replace('/#.*-[0-9]*/i', '[${0}](/${0})', $this->description); 它可以工作并将#CODE-123替换为[#CODE-123](/#CODE-123),但我需要它改为[#CODE-123](CODE-123)
preg_replace
来替换\code-123
的每一种标记
除了最后一个细节外,它工作得非常好,我需要在第二次使用它时从字符串中删除#
,但我不知道如何使用它
以下是我目前掌握的情况:
echo preg_replace('/#.*-[0-9]*/i', '[${0}](/${0})', $this->description);
它可以工作并将#CODE-123替换为[#CODE-123](/#CODE-123)
,但我需要它改为[#CODE-123](CODE-123)
有什么想法吗?谢谢 如果将其分组(使用括号(..)
),则可以独立地处理找到的每个问题
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)