$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" ???
答案 0 :(得分:2)
此处不要使用global
;您已经在使用闭包,因此请使用use
:
function ($m) use ($skip_books) {
// ...
}
顺便说一下,到目前为止,你实际上并没有在你显示的代码中使用$skip_books
,但我认为这是因为你简化了它
如果您的参数始终是数字,请不要使用类似(.+?)
的通用内容,但要具体(越多越好):
/\[book=(\d+)_(\d+)\]/i
我还删除了/s
和/m
修饰符,这些修饰符在这里没用。