0

我对 preg_replace 很困惑,我有这个字符串,我只想更改 _ 之前的数字

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

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

谢谢

4

2 回答 2

3

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

$string = 'string/1_491107.jpg';
$newstring = preg_replace('#([0-9]+)_#', '666_', $string);
于 2013-08-19T16:24:30.767 回答
3

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

你可以这样做:

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

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

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

正则表达式 101 演示

于 2013-08-19T16:24:52.490 回答