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

时间:2014-04-28 22:10:33

标签: regex

this lesson我不明白为什么[^b]不正确?我知道[^bog]是正确的。

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

我的理解有什么不妥吗?

4 个答案:

答案 0 :(得分:21)

对于特定的lesson,正确的regex是:

[^b]og

<强> 说明:

/[^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)

<强> 注意:

  

<强> Negated Character Classes

     

打开方括号后键入插入符号会使字符无效   类即可。结果是字符类匹配任何字符   那不是在角色类中。与点,否定字符不同   类也匹配(不可见)换行符。如果你不这样做   想要一个否定的字符类来匹配换行符,你需要   包括类中的换行符。 [^ 0-9 \ r \ n] 匹配任何   不是数字或换行符的字符。

     

重要的是要记住否定的角色类仍然必须   匹配一个角色。 q [^ u] 并不意味着:“ a q后面没有u ”。它   表示:“一个q后跟一个不是你的字符”。它不是   匹配字符串伊拉​​克中的 q 。它确实匹配 q 空间    之后 伊拉克是一个国家 。确实:空间成为其中的一部分   总体匹配,因为它是“字符不是你”   在上面的正则表达式中与否定字符类匹配。如果你   希望正则表达式匹配两个字符串中的 q ,只有 q ,   需要使用negative lookahead

答案 1 :(得分:4)

您基本上是正确的,但[^b]仍会与o中的gbog匹配 - 这意味着它是成功的匹配,即使它不匹配整个字符串。 [^bog]只会h中的hogd中的dogbog中的任何内容 - 都不会匹配bog 1}}。

我认为如果你看一下^[^b]+$,这会更有意义。这将匹配1+b字符,锚定在字符串的开头(^)和结尾($)。将其与[^b][^bog]的初始表达式进行比较,您可以看到差异。我建议使用GUI RegEx测试器(以前链接的测试仪是我最喜欢的),这将真正有助于说明逻辑。

答案 2 :(得分:3)

^[^b]有效。

^外面[] s表示&#34;字符串的开头&#34;

答案 3 :(得分:3)

[^b]只匹配一个不是&#39; b&#39;。的字符 [^b]+会指定RegEx组匹配一个或多个不是&#39; b&#39;的字符。
[^b]*会指定RegEx组匹配零个或多个不是&#39; b&#39;。

的字符