我有字符串 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/