代码之家  ›  专栏  ›  技术社区  ›  Zack Shapiro

如何拨入regex以检测@username

  •  0
  • Zack Shapiro  · 技术社区  · 7 年前

    我有一个正则表达式,我刚刚意识到它不够精确。现在我正在使用:

    let regex = try NSRegularExpression(pattern: "@[^\\s]+")

    在下面的字符串上: let str = "@alice, @bob, @zack@example.com sara@example.com"

    正在回归 ["@alice,", "@bob,", "@zack@example.com", "example.com"] (注意一些数组元素中的逗号)

    我怎样才能使它更精确地抓住“@alice”和“@bob”,而不使用尾随逗号,并且忽略后两个示例?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Wiktor Stribiżew    7 年前

    您可以使用

    let regex = try NSRegularExpression(pattern: "\\B@[^@\\s]+\\b(?!@\\w)")
    

    regex demo .

    它将匹配

    • \B@ -A @ 前面没有字母、数字或 _
    • [^@\s]+ -1个字符以上 @ 和空白
    • \b -单词边界
    • (?!@\w) -不 @ 后跟字母、数字或 γ 允许立即位于当前位置的右侧。一 (?!@) 不过也许足够了。