Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在preg_replace replace参数中使用替换模式_Php_Regex - Fatal编程技术网

Php 在preg_replace replace参数中使用替换模式

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)

我试图使用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)

有什么想法吗?谢谢

如果将其分组(使用括号
(..)
),则可以独立地处理找到的每个问题

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)