我有字符串page-24
,并希望将24
替换为任何其他数字。
脚本是用PHP编写的,使用preg_replace
,但是这个问题应该独立于编程语言。
我的匹配模式是:(.*-)(\d*)
替换模式为:$1[insert number here]$2
反向引用有效,但我无法在替换模式中的给定位置插入数字,因为表达式将以错误的方式解释。 (如果我将99作为数字插入,则第一次反向引用第199场比赛。)
我在这里错过了逃脱角色吗?
答案 0 :(得分:3)
在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'
。)
请参阅PHP中的here for documentation。 Perl使用相同的表示法。据我所知,Javascript不支持${1}
表示法,但如果至少有199个匹配的括号,它会将$199
解释为${199}
,{{1}如果存在至少19个匹配的parens,则${19}9
如果存在至少1个匹配的paren,或者如果没有匹配则为文本字符串${1}99
。我不了解其他语言的实现。
答案 1 :(得分:1)
您可以使用匹配模式
(.*)-(\d*)
并替换模式
$1-[new number]
如果要替换它,为什么在替换模式中有$ 2的引用?