PHP 用主题字符串中的模式替换正则表达式

PHP replace regex with pattern inside subject string

我不太确定标题的措辞,但我正在努力实现以下目标:

$string = 'category/(.*)/page/([0-9]+)' 我需要通过传递参数数组将其转换为 category/test/page/2,如下所示:

Array
(
    [0] => test
    [1] => 2
)

执行 $string = preg_replace('#^'.$string.'$#', $replacements, $string) 会导致关于 $replacements 是一个数组的错误,这与 the documentation 所说的相匹配,但是我不确定该怎么做。

我真的无法理解模式和主题以相同的字符串开头。

您将创建一个 new 正则表达式来匹配您想要的字符串。您必须创建与文字字符串 (.*)([0-9]+) 相匹配的内容。可能是这样的:

/(.+)\/(\(.+\))\/(.+)\/(\(.+\))/

那你可以试试这样做:

$string = preg_replace('/(.+)\/(\(.+\))\/(.+)\/(\(.+\))/', '/test//2', $string);

或使用$replacements:

$string = preg_replace(
    '/(.+)\/(\(.+\))\/(.+)\/(\(.+\))/',
    '/'.$replacements[0].'//'.$replacements[1],
    $string
);

演示:https://eval.in/435153