preg_match(): 编译失败:无法识别的字符

preg_match(): Compilation failed: unrecognized character

对不起我的英语。

$string = "product#[:id]#[:str]";

$regex = preg_replace("/\[:(\w+)\]/", "(?<>.+?)", $string);

我得到的是product#(?.+?)#(?.+?)而不是product#(?<id>.+?)#(?<str>.+?)

我想这样做是因为我需要 preg_match() 在 $matches:

中创建键名
preg_match('/^'. $regex .'$/', str_replace("/", "#", self::$path), $matches)

重点是,它可以在没有“<”和“>”的情况下工作。但是我需要它们来编写下一个代码。 那么我应该如何处理这些“<”、“>”字符呢?我需要它们,但不知道该怎么做。我也试图逃避他们:\<(但没有结果)。

有什么想法请帮帮我

编辑:

看来我做的还可以。 现在有新问题:

$string = "product#[i:id]#[*:str]";

$regex = preg_replace("/\[i:(\w+)\]/", "(?<>[0-9]+)", $regex);
$regex = preg_replace("/\[\*:(\w+)\]/", "(?<>.+?)", $regex);

不,我尝试了其他方法,但这不起作用。为什么? :(

如果要在浏览器中呈现您的 preg_replace 的结果, 而这个 rendered 结果应该包含 <> 字符, 那么你应该将它们生成为 &lt;&gt;.

所以也许你的替换字符串(preg_replace 的第二个参数)应该是:

(?&lt;&gt;.+?)