正则表达式不包括特定字符

Sai*_*akR 18 regex

本课中,我不明白为什么[^b]不正确?我明白这[^bog]是对的.

[^b]应该匹配任何没有b字符的字符串,并且不匹配包含任何b字符的任何字符串.

我的理解有什么不对吗?

Ped*_*ito 26

对于那个特定的课程,正确的regex是:

[^b]og
Run Code Online (Sandbox Code Playgroud)

说明:

/[^b]og/

[^b] match a single character not present in the list below
b the literal character b (case sensitive)
og matches the characters og literally (case sensitive)
Run Code Online (Sandbox Code Playgroud)

笔记:

否定字符类

开始方括号后键入一个插入符号否定了字符类.结果是字符类匹配任何不在字符类中的字符.与点不同,否定的字符类也匹配(不可见)换行符.如果您不希望否定的字符类匹配换行符,则需要在类中包含换行符.[^ 0-9\r \n]匹配任何不是数字或换行符的字符.

重要的是要记住,否定的字符类仍然必须与字符匹配.q [^ u]并不意味着:" aq没有跟着au ".这意味着:" aq后跟一个不是au的角色 ".它与字符串伊拉克中的q不匹配.它匹配q空间q伊拉克一个国家.确实:空间成为整体匹配的一部分,因为它是" 不是au的字符 ",与上面的regexp中的否定字符类相匹配.如果您希望正则表达式匹配两个字符串中的q和仅q,则需要使用.negative lookahead


dgp*_*dgp 6

[^b]只会匹配一个不是'b'的字符。
[^b]+将指定RegEx组以匹配一个或多个不是'b'的字符。
[^b]*将指定RegEx组匹配零个或多个不是'b'的字符。


Dou*_*tog 5

^[^b] 作品。

^OUTSIDE的[]s表示“字符串的开始”


Sam*_*Sam 5

您从根本上说是正确的,但[^b]仍然会匹配og输入bog——这意味着它是一个成功的匹配,即使它没有匹配整个字符串。 [^bog]只会匹配hin hogdin dog,而没有 in bog—— 意味着它不匹配bog

我认为如果您查看^[^b]+$. 这将匹配1+b字符,在开始(锚定^)和结束($该字符串的)。将其与[^b]or的初始表达式进行比较[^bog],您可以看到不同之处。我建议使用 GUI RegEx 测试器(之前链接的测试器是我最喜欢的),这将真正有助于说明逻辑。