我对preg_replace非常困惑,我有这个字符串,我想改变_之前的数字
$string = 'string/1_491107.jpg';
$newstring = preg_replace('#([0-9]+)_#', '666', $string);
然后我得到“string / 666491107.jpg”而不是“string / 666_491107.jpg”
由于
答案 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);