RegEx -避免匹配以特定字符结尾的单词

vx6bjr1n  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(151)

我正在尝试创建一个正则表达式(regexp),它将避免匹配以“@”、“-”、“!”、“:”和“〉”结尾的单词
规则如下-名称应以@开始,其后可以有除上述字符之外的任何字符。因此在以下字符串中:“zhsvfghzfajhuib@Bobbie?skvshvfhj!G!”- @Bobbie?将匹配“768huehfvwkjv@Lana97958749ndgjhb!G!”- @Lana9将匹配“,vbfnhytjnh@ Sammie-sjvjhsvfjj!G!kjdbdjb”- @Sammie-将不匹配,因为名称后面的字符在上述范围内。
我最近的尝试是:@(?[A-Za-z]+)[^@-!:〉],但它所做的只是删除最后一个字符,仍然匹配。
我试探着:

  • 在搜索中添加另一个字符@(?[A-Za-z]+).[^@-!:〉],但搜索只是移动到下一个字符。
  • 添加单词边界@(?[A-Za-z]+)\b[^@-!:〉],这在某些情况下有帮助,但不是所有情况下都有帮助
zujrkrfu

zujrkrfu1#

如果支持,可以使用原子组:

@(?>(?<name>[A-Za-z]+))[^@\-!:>]

Regex demo
另一个选项是使用具有捕获组和反向引用的正前瞻,因为在前瞻循环中没有回溯:

@(?=([A-Za-z]+))\1[^@\-!:>]

Regex demo

相关问题