preg_match_all参数问题

时间:2017-08-22 10:07:17

标签: php laravel laravel-5

所以我的项目目前有以下代码行。

if(preg_match_all('/(?<=^|\s)@(\w+)/', $content, $match)) {

现在问题是,如果用户名称有标点符号(例如?Dennis或-Damo),则不允许@标签提取用户名,例如@ -Damo或@?Dennis不会标记用户(代码跟在此行之后。

我知道如何修改上述内容,以便@符号后允许使用标点符号

2 个答案:

答案 0 :(得分:0)

如果你想捕捉@之后的所有内容,那么你可以选择......

if(preg_match_all('/(?<=^|\s)@(.+)/', $content, $match)) {

这基本上不关心@后的内容。

如果你想要特定的角色,那么也许......

if(preg_match_all('/(?<=^|\s)@([A-Za-z0-9?-]+)/', $content, $match)) {

注意最后一个 - 在那个班级。它与A-Z,a-z或0-9

之间的不同

如果你想在@(但是可选)之后只有标点符号,那么

if(preg_match_all('/(?<=^|\s)@([?-]?[A-Za-z0-9]+)/', $content, $match)) {

http://www.regular-expressions.info/charclass.html

答案 1 :(得分:0)

我最终使用了这段代码并完美地完成了它!

if(preg_match_all('/(?<FullMention>@(?<UsernameOnly>[a-zA-Z0-9,\-_]{1,}))/', $content, $match)) {
    foreach($match['UsernameOnly'] as $usr) {
        -code here-
    }
}