与preg_replace有些混淆

时间:2013-08-19 16:23:01

标签: php

我对preg_replace非常困惑,我有这个字符串,我想改变_之前的数字

$string = 'string/1_491107.jpg';
$newstring = preg_replace('#([0-9]+)_#', '666', $string);

然后我得到“string / 666491107.jpg”而不是“string / 666_491107.jpg”

由于

2 个答案:

答案 0 :(得分:3)

你有下划线作为要替换的文本的一部分;因此您还需要将其包含在替换中:

$string = 'string/1_491107.jpg';
$newstring = preg_replace('#([0-9]+)_#', '666_', $string);

答案 1 :(得分:3)

您在此处所做的是将替换中的括号中的数字与$1相匹配。你实际上并没有说“只应替换括号内的东西”。

你可以这样做:

$string = 'string/1_491107.jpg';
$newstring = preg_replace('#[0-9]+_#', '666_', $string);

或者您可以使用positive lookahead(仅匹配数字序列后跟下划线,但不要在匹配中包含下划线):

$string = 'string/1_491107.jpg';
$newstring = preg_replace('#[0-9]+(?=_)#', '666', $string);

Regex 101 demo