[英]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_relRef
和ATAT_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.