php - 正则表达式的数字替换模式问题

标签 php regex preg-match

我有字符串 page-24 并且希望将 24 替换为任何其他数字。

该脚本是用 PHP 编写的,并使用 preg_replace,但是这个问题应该与编程语言无关。

我的匹配模式是:(.*-)(\d*)

替换模式为:$1[在此处插入数字]$2

反向引用有效,但我无法将数字插入替换模式中的给定位置,因为表达式将以错误的方式解释。 (如果我插入 99 作为数字,则第一次反向引用第 199 场比赛。)

我在这里缺少转义字符吗?

最佳答案

在 PHP 中,替换字符串如下所示:

'${1}[insert number here]$2'

或者像这样(如果它在双引号字符串中):

"\${1}[insert number here]$2"

示例:

$s = 'page-24';
$out = preg_replace('/(.*-)(\d*)/', '${1}99$2', $s);
echo "out is $out"; //prints 'page-9924'

(您可能只需要 ${1}99,这会给出 'page-99' 而不是 'page-9924'.)

参见here for documentation在 PHP 中。 Perl 使用相同的表示法。据我所知,Javascript 不支持 ${1} 表示法,但它会将 $199 解释为 ${199} > 如果至少有 199 个匹配的括号,如果至少有 19 个匹配的括号,则为 ${19}9;如果至少有 19 个匹配的括号,则为 ${1}99 1 个匹配括号,如果没有匹配则为文字字符串 $199。我不知道其他语言的实现。

关于php - 正则表达式的数字替换模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512387/

相关文章:

php preg_match 在标志处

php - 调整在电话号码上使用 Preg_Match()

php - sphinx php api 不工作

c++ - C++ 11 中的正则表达式

PHP 模板引擎,可以将表示与后台逻辑分离

php - 在获取 PHP 正则表达式匹配时遇到问题

Javascript 正则表达式检测页面源中的所有电话号码

php - Preg_match 差异?

php - 如何从具有一对一和多对关系的 3 个模型中获取数据?

java - PHP 与 Java 是否存在能耗差异?