为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式完全匹配 1 个特定字符

正则表达式完全匹配 1 个特定字符

C#
开满天机 2023-07-22 15:47:02
我正在尝试匹配@relRef但不是@@absRef来自:Stuff @relRef more stuff @@absRef据我了解,[^@]@{1}[^\s]*应该可以,但它仍然错误地选择两者。并不{1}意味着我认为我所做的?(我认为这意味着“与前一件事完全匹配1次”)[^@]@[^@][^\s]*确实有效,但对于我的用例来说不太方便,更重要的是,我不明白为什么我原来的解决方案不起作用。最后,如果这个答案是多个字符,那么无论这个答案最终会发生什么变化。(即,如果句子是Stuff AT_relRef more stuff ATAT_absRef这样,那么现在我不会检查单个@字符,而是检查“AT”。)长话短说:1)为什么[^@]@{1}[^\s]*匹配@@absRef以及如何将其修复为仅匹配@relRef?2) 如果我使用多个字符来标记引用,#1 的答案是否会改变?(即AT_relRef和ATAT_absRef)
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您的正则表达式匹配两者,因为[^\s]它匹配任何字符,但空格也会匹配该@字符。在这两种情况下都匹配空格[^@],因此它没有足够的帮助。此外,@{1}与 相同@{1}量词在任何正则表达式中始终是多余的。

您可以使用

(?<!@)@[^\s@]\S*

请参阅正则表达式演示

细节

  • (?<!@)-@不在当前位置之前

  • @- 一个@字符

  • [^\s@]@- 除和 空格之外的字符

  • \S*- 0 个或多个非空白字符。

对于第二种情况,负向回顾也将起作用:

(?<!AT)AT_\S*

请参阅正则表达式演示。它匹配

  • (?<!AT)- 前面没有的任何位置AT

  • AT_- 一个子AT_

  • \S*- 0+ 个除空格之外的字符。


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信