gpt4 book ai didi

php - 完善用于查找@username 标签的正则表达式

转载 作者:可可西里 更新时间:2023-10-31 23:06:55 24 4
gpt4 key购买 nike

我正在使用一个系统来获取@twitter 之类的名字,下面的正则表达式近乎完美:

(?<![^\s<>])@([^\s<>]+)

我发现的问题是名字后面有没有标点符号

例如:

  • 嘿@mark ===> 匹配@mark (这就是我们想要的)
  • 嘿@mark。 ===> 匹配@mark。
  • 嘿@mark,你真好 ===> 匹配@mark,
  • 嘿@mark!!!!我没想到 ===> 匹配@mark!!!!

显然我们只想匹配用户名而不是标点符号。需要注意的是,某些用户名在用户名中包含这些句点,例如

例如,这些都是合法的用户名

马克.马克库斯

mark@gmail.com

mark_markus@gmail.com

编辑 我们正在使用后视,如果上面的用户名前面有@,它们应该匹配,但如果前面没有@,那么电子邮件地址实际上应该不匹配。 @mark_markus@gmail.com 应该匹配 mark_markus@gmail.com,但如果有人键入普通的旧 mark_markus@gmail.com,我们不希望 gmail.com 匹配。

关于如何修改正则表达式以说明可以使用的各种标点符号的任何想法?

最佳答案

这个怎么样:

(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)

我已经替换了[^\s<>][\w@] ,这有点限制。 \w匹配字母、数字和下划线。如果您特别需要允许使用任何其他字符,请将它们添加到每个字符类中。

本组:(?:\.\w+)*允许一个或多个句点作为用户名的一部分,但前提是它们紧跟单词字符。注意 (?:...)是一个非捕获组。当您想出于逻辑目的对事物进行分组但不需要捕获结果时,它很有用。

更新: see a working example .

关于php - 完善用于查找@username 标签的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com