PHP Preg Replace在换行后不起作用

问题描述 投票:-1回答:1

具有获取txt文件,替换换行符,然后链接和主题标签的代码。

#当主题标签在换行符之后时,它不会替换主题标签。不知道在regrex的哪个地方失败。

// replace line breaks
$txt = str_replace('&lt;br /&gt;','<br />',$txt);

// replace links
$txt = preg_replace_callback('@(https?://([-\w\.]+)+(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)?)@', function($m) { return '<a href="'.$m[1].'" target="_blank">'.substr($m[1], 0, 30).'...</a>'; }, $txt);

// replace hashtags
$txt = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/m', '<a href="index.php?q=$1">#$1</a>', $txt);
php preg-replace str-replace
1个回答
0
投票

(?<!\S)表示井号之前的字符必须是空白字符(不是非空白(\S))。 >中的<br />不满足该要求。您可以断言#标签之前的字符不是word字符([A-Za-z0-9_]):

$txt = preg_replace('/(?<!\w)#([0-9a-zA-Z]+)/m', '<a href="index.php?q=$1">#$1</a>', $txt);

Demo on 3v4l.org

© www.soinside.com 2019 - 2024. All rights reserved.