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

我正在尝试匹配@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_relRefATAT_absRef


开满天机
浏览 77回答 1
1回答

九州编程

您的正则表达式匹配两者,因为[^\s]它匹配任何字符,但空格也会匹配该@字符。在这两种情况下都匹配空格[^@],因此它没有足够的帮助。此外,@{1}与 相同@,{1}量词在任何正则表达式中始终是多余的。您可以使用(?<!@)@[^\s@]\S*请参阅正则表达式演示。细节(?<!@)-@不在当前位置之前@- 一个@字符[^\s@]@- 除和 空格之外的字符\S*- 0 个或多个非空白字符。对于第二种情况,负向回顾也将起作用:(?<!AT)AT_\S*请参阅正则表达式演示。它匹配(?<!AT)- 前面没有的任何位置ATAT_- 一个子AT_串\S*- 0+ 个除空格之外的字符。
打开App,查看更多内容
随时随地看视频慕课网APP