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

ここでは役に立たない/sと修飾子も削除しました。/m

于 2013-01-25T00:48:53.073 に答える