php 用于特殊模式替换的正则表达式

ygya80vv  于 2023-02-15  发布在  PHP
关注(0)|答案(1)|浏览(107)

我需要正则表达式方面的帮助。
对于用PHP替换占位符,我有以下搜索模式:

__H1-(.*)__
__H1-(.*)-(.*)__
__H1-(.*)-(.*)-(.*)__
Etc.

我有以下案文:

$text ="This is an example __H1-1__ with placeholders __H1-1-2__ that are replaced";

这是我的替换函数

$text = preg_replace("/" . $placeholder . "/U", $replace_string, $text);

这里的问题是只找到了第一个搜索模式,但是应该区别对待这些模式。
目前,当查找**H1-(. *)**时,$text中的两个字符串(在第二个部分模式中)都会被替换。
另一个问题是搜索文本可能是这样的

__H1-1-2-hi____H1-1-2__

在这种情况下,只找到第一个模式,但这是两个不同的模式:

__H1-1-2-hi__
__H1-1-2__

我该怎么处理这种事?

ars1skjm

ars1skjm1#

您的正则表达式的问题是.*在可能的情况下也会捕获-_。这不是您想要的...所以不要允许:

$placeholder1 = "__H1-([^-_]*)__";
$placeholder2 = "__H1-([^-_]*)-([^-_]*)__";
$placeholder3 = "__H1-([^-_]*)-([^-_]*)-([^-_]*)__";

相关问题