带有捕获组的PHP preg_replace

时间:2014-07-20 20:33:00

标签: php preg-replace

如何将preg_replace与捕获组一起使用?:

preg_replace('/testing\[([0-9]+)\]/', $this->storeNew[**THE NUMBER THAT WAS IN BETWEEN**], $this->code);

2 个答案:

答案 0 :(得分:3)

您应该使用preg_replace_callback和自定义函数来实现这一目标。

你可以这样做:

class A {

    private $code = 'testing[82]';

    public function match() {
            return preg_replace_callback('/testing\[([0-9]+)\]/',function($matches) {

         return $this->storeNew($matches[1]);

    }, $this->code);

    }

    private function storeNew($number){
        return ++$number;
    }

}  

$a = new A();
echo $a->match();

使用$ this会有点棘手,所以你可能需要类似的东西(@NiettheDarkAbsol代码下面):

$src = $this->storeNew;
preg_replace('/testing\[([0-9]+)\]/', function($n) use ($src) {
    return isset($src[$n[1]]) ? $src[$n[1]] : $n[0];
    // return unchanged if not found in array
},$this->code);

答案 1 :(得分:0)

我不确定您希望以哪种方式使用该号码。如果您只是需要数字本身而没有别的我不会使用RegEx,而是使用:

filter_var('testing[83]', FILTER_SANITIZE_NUMBER_INT);