假設有以下字串:
@twitter @handles @hello
使用下面的代碼,我可以替換字串并生成鏈接
preg_replace(
'/(?:^|[^>])(@' . $data->entities->user_mentions[$i]->screen_name . ')/',
'<a href="https://twitter.com/' . $data->entities->user_mentions[$i]->screen_name . '">@' . $data->entities->user_mentions[$i]->screen_name . '</a>',
$data->text
);
但是上面的代碼替換了第 0 組,而不是第 1 組
stackoverflow 上的很多問題向人們展示了如何將組 0 替換為組 1,但不是相反。謝謝你。
好的,所以我的代碼并不完全清楚,所以讓我說明問題:
第 1 組如下所示:
@twitter
@handles
@hello
但第 0 組看起來像這樣:
@twitter
@handles
@hello
它與空格匹配,我不想要那樣。
uj5u.com熱心網友回復:
您可以更改(?:^|[^>])為不會消耗的負面回顧:(?<!>)
另一種選擇是使用\K重置開始報道比賽:(?:^|[^>])\K
僅供參考:preg-replace-callback據我所知,除了使用(您可以在其中修改/回傳任何組的捕獲)之外,這\K是從正則運算式端更改完整報告部分 [0] 的唯一選擇。
uj5u.com熱心網友回復:
如果您希望左側的空白邊界不匹配#@twitter,您還可以省略捕獲組并使用否定的后視斷言(?<!\S)
preg_replace(
'/(?<!\S)@' . $data->entities->user_mentions[$i]->screen_name . '/',
'<a href="https://twitter.com/' . $data->entities->user_mentions[$i]->screen_name . '">@' . $data->entities->user_mentions[$i]->screen_name . '</a>',
$data->text
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354318.html
