0
$details = "text...[book=123]...text...";

$details = preg_replace_callback(
  "/\[book=(.+?)\]/smi",
  function ($m) {
      global $skip_books;
      $book = $m[1];  // 123
      $feed = $m[2];  // 456       
  return "<div id=\"view_book_".$book."_".$feed."\"></div>";
  },
  $details
);

使用这种模式,我只能得到 $book ($m[1]):

"/\[book=(.+?)\]/smi"`

但我也想获得 $feed ($m[2]),所以我替换为这个 [book=123_456]。

如何在下划线后得到“456”($m[2])?

"/\[book=(.+?)_(.+?)\]/smi" ???
4

1 回答 1

2

不要global在这里使用;您已经在使用闭包,因此请使用use

function ($m) use ($skip_books) {
    // ...
}

顺便说一句,您实际上并没有$skip_books在到目前为止显示的代码中使用,但我假设那是因为您已经简化了它

如果您的论点始终是数字,请不要使用通用(.+?)的东西,例如但要具体(越多越好):

/\[book=(\d+)_(\d+)\]/i

我还删除了/sand/m修饰符,它们在这里没用。

于 2013-01-25T00:48:53.073 回答