正则表达式修复了preg_replace_callback函数

时间:2011-09-13 19:57:29

标签: php regex preg-replace-callback

STRING:

$string = '{$string#anything#something this string will output default |ucfirst|strtoupper}';

PREG_REPLACE_CALLBACK CODE(PHP):

$string = preg_replace_callback('/\{\$?([^# ]+)\#?([^ ]+)? ?([^|]+)?[ \|]?([^\}]+)?\}/', $matches, $string);

OUTPUT($ matches):

Array
(
    [0] => {$string#anything#something can you hear me? |ucfirst|ucfirst|ucfirst|strtoupper}
    [1] => string
    [2] => anything#something
    [3] => can you hear me? 
    [4] => ucfirst|strtoupper
)

要求:代替{$string this string will output default |ucfirst|strtoupper},我想使用{$string this string will output default ucfirst|strtoupper}(注意:ucfirst前方的管道标志已删除);

  

重要提示:输出(即$ matches数组)应与上面打印的相同。

非常感谢您的帮助,感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

我尝试改变你的功能代码......

代码

 <pre>
 <?php
      $string = '{$string#anything#something this string will output default |ucfirst|strtoupper}'; http://www.magentocommerce.com/support/magento_core_api 
      preg_match('/\{\$?([^# ]+)\#?([^ ]+)? ?([^|]+)?[ \|]?([^\}]+)?\}/', $string, $matches);
      var_dump($matches);
  ?>
  </pre>

获得的结果

array(5) {
    [0]=>string(80) "{$string#anything#something this string will output default |ucfirst|strtoupper}"
    [1]=>string(6) "string"
    [2]=>string(18) "anything#something"
    [3]=>string(32) "this string will output default "
   http://php.net/manual/en/function.preg-replace-callback.php [4]=>string(18) "ucfirst|strtoupper"
}

是否符合您的期望?我们应该更换“此字符串将输出”默认为“你能听见我吗?” 你想在ucfirst之前删除管道,你想在字符串中执行此操作并更新reg exp,如果是这样,那么识别''ucfirst''字符串的规则是什么(第一个管道之前的最后一个字符串? )

你想用preg_replace_callback做什么,这个函数会为每个找到的主题调用一个函数(你的$ matches参数)......这是你的想法吗?

链接文档:http://php.net/manual/en/function.preg-replace-callback.php