Regex排除特定字符

fkaflof6  于 2023-06-25  发布在  其他
关注(0)|答案(5)|浏览(160)

this lesson中,我不明白为什么[^b]不正确?[^bog]是正确的。
[^b]应该匹配任何没有b字符的字符串,并且不匹配任何包含b字符的字符串。
我的理解有错吗?

xdnvmnnf

xdnvmnnf1#

对于特定的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”。它的意思是:“a q后跟一个不是u的字符”。它与字符串Iraq中的q不匹配。它确实匹配qq后面的空格在*伊拉克是一个国家***。实际上:空格成为整体匹配的一部分,因为它是“不是u字符”,由上面的regexp中的否定字符类匹配。如果你想让正则表达式匹配两个字符串中的q**,并且只匹配q,你需要使用negative lookahead

moiiocjp

moiiocjp2#

^[^b]工作。
^ OUTSIDE the [] s表示“字符串的开始”

vs91vp4v

vs91vp4v3#

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

jei2mxaa

jei2mxaa4#

您基本上是正确的,但是[^b]仍然会匹配bog中的og--这意味着它是一个成功的匹配,即使它没有匹配整个字符串。[^bog]将只匹配hog中的hdog中的d,而bog中的bog则不匹配--这意味着它不匹配bog
如果你看一下^[^b]+$,我想这会更有意义。这将匹配1+b字符,锚定在字符串的开头(^)和结尾($)。将其与[^b][^bog]的初始表达式进行比较,您可以看到差异。我建议使用一个GUI RegEx测试器(前面链接的是我最喜欢的),这将真正有助于说明逻辑。

v09wglhw

v09wglhw5#

您可以在flutter语言中将其与inputFormatter一起使用
这将排除emoji和此特殊字符。如果你想增加数字,你也可以把它放进去。

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

相关问题