RegEx的数字替换模式问题

时间:2010-08-18 13:07:56

标签: php regex preg-match

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

脚本是用PHP编写的,使用preg_replace,但是这个问题应该独立于编程语言。

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

替换模式为:$1[insert number here]$2

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

我在这里错过了逃脱角色吗?

2 个答案:

答案 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的引用?