Php Preg_replace_回调返回2个值

Php Preg_replace_回调返回2个值,php,regex,replace,callback,preg-replace,Php,Regex,Replace,Callback,Preg Replace,我有以下代码,但我不太喜欢reg exp,因为它们太令人困惑了: <?php $r = '|\\*(.+)\\*|'; $w = ''; $s = 'hello world *copyMe* here'; function callbk($str){ print_r($str); foreach($str as $k=>$v) { echo $v; } } $t = preg_replace_callback($r,'callbk',$s)

我有以下代码,但我不太喜欢reg exp,因为它们太令人困惑了:

<?php
$r = '|\\*(.+)\\*|'; 
$w = '';
$s = 'hello world *copyMe* here'; 
function callbk($str){
    print_r($str);
    foreach($str as $k=>$v) {
        echo $v;
    }
}
$t = preg_replace_callback($r,'callbk',$s);

//output: Array ( [0] => *copyMe* [1] => copyMe ) *copyMe*copyMe


?>

我的问题是为什么既有“*copyMe*”又有“copyMe”? 我希望得到其中一个,而不是两个。
任何帮助都将非常感谢。

因为您使用的是捕获表达式
()
。如果省略括号,你只会得到
*copyMe*

很好的一个:)我以为括号是一组东西,但这就成功了;)还有一个简单的提示:编写Regexp时,最好使用
/
作为分隔符,而不是
|