繁体   English   中英

正则表达式正好匹配特定字符中的1个

[英]Regex matching exactly 1 of a specific character(s)

我正在尝试从中匹配@relRef但不匹配@@absRef

Stuff @relRef more stuff @@absRef

据我了解, [^@]@{1}[^\\s]*应该可以工作,但是仍然错误地选择了两者。 {1}代表我的意思吗? (我认为这意味着“将上一件商品精确匹配1次”)

[^@]@[^@][^\\s]*确实可以工作,但是用例不太方便,更重要的是,我不理解为什么我的原始解决方案不起作用。

最后,如果答案是多个字符,该答案的最终结果是否会改变。 (即,如果句子是Stuff AT_relRef more stuff ATAT_absRef那么现在我不是在检查单个@字符,而是在检查“ AT”。)

TL;博士:

1)为什么[^@]@{1}[^\\s]*@@absRef匹配,如何解决它仅与@relRef匹配?

2)如果我使用多个字符来标记引用,对#1的答案是否会改变? (即AT_relRefATAT_absRef

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

您可以使用

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

参见regex演示

细节

  • (?<!@) -在当前位置之前没有@
  • @ -一个@ char
  • [^\\s@] -除@和空格外的字符
  • \\S* -0或多个非空白字符。

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

(?<!AT)AT_\S*

参见regex演示 它匹配

  • (?<!AT) -任何未加AT位置
  • AT_ - AT_子字符串
  • \\S* -除空格以外的0+个字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM