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



在本课中,我不明白为什么[^b]不正确?我知道[^bog]是正确的。

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

我的理解有什么问题吗?

对于该特定课程,正确的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)

笔记:

否定字符类

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

重要的是要记住,否定字符类仍然必须 匹配字符。q[^u] 并不意味着:">Q 后面不跟 U"。它 意思是:">一个 Q 后跟一个不是 U 的字符"。它没有 匹配字符串伊拉克中的 q。它确实匹配 q空格 在伊拉克的Q之后是一个国家。确实:空间成为 整体匹配,因为它是">不是 U 的角色" 与上述正则表达式中的否定字符类匹配。如果你 希望正则表达式与两个字符串中的 q 匹配,并且仅匹配 q,您 需要使用negative lookahead

^[^b]有效。

[] s 之外的^表示"字符串的开头">

[^b]将只匹配一个不是"b"的字符.
[^b]+将指定该正则表达式组以匹配一个或多个不是"b".
[^b]*将指定该正则表达式组匹配零个或多个不是"b"的字符.

你基本上是正确的,但[^b]仍然会匹配og bog - 这意味着这是一个成功的匹配,即使它没有匹配整个字符串。 [^bog]只会在hog中匹配h,在dogd匹配,而在bog中没有任何匹配 - 这意味着它不匹配bog

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

你可以用颤振语言将它与inputFormatter一起使用

这将排除表情符号和此特殊字符。如果你想添加数字,你也可以放进去。

 inputFormatter: <TextInputFormatter>[
          FilteringTextInputFormatter.deny(r'[¬¦्«»ΩΠμ§¡¿±·£%,!#$%&*+";:/=?^`{|}~₹)(•√π÷׶∆€¥¢°©®™✓><[]\’|‘|”|“|]u00a9|u00ae|[u2000-u3300]|ud83c[ud000-udfff]|ud83d[ud000-udfff]|ud83e[ud000-udfff]')
]

最新更新