Laravel 5 - preg_match_all问题

时间:2017-11-06 13:10:19

标签: php preg-match-all

所以,当有人在我的网站(自定义编码论坛)上提交帖子时,我运行了以下代码,但我遇到的问题是,如果某人的名字中有特殊字符(例如' - '' _'或','它不会为其名称注册。

$ content =用户插入文本正文的内容,例如,如果他们想要标记Andy,他们就会在某个地方输入@Andy。

e.g。 " @Andy你好吗?"或者,"这是什么时候发生的,@安迪?"并且它会标记用户Andy,但是如果用户的用户名中有标点符号,则根本不会对其进行标记,例如" @,丹尼斯你好吗?"或者,"这是什么时候发生的,@,丹尼斯?"。内部标点符号也是如此,例如@朱迪五月

我运行的代码如下。我认为它与preg_match_all查询有关,但基本上,我希望它能够获取标点符号,但也可以继续也许"嘿@,丹尼斯,怎么样@Janice和@ -Dannie?"我希望它也标记Janice和-Dannie。

if(preg_match_all('/(?<=^|\s)@(\w+)/', $content, $match)) {
    foreach($match[1] as $usr) {
        -code here-
    }
}

2 个答案:

答案 0 :(得分:0)

如果您想忽略标签名称中的标点符号,可以使用:

{{1}}

您可以尝试here

答案 1 :(得分:0)

我和我的伙伴一起修复了这个问题,如下所示。

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

这对我有用。