在this lesson中,我不明白为什么[^b]不正确?[^bog]是正确的。[^b]应该匹配任何没有b字符的字符串,并且不匹配任何包含b字符的字符串。我的理解有错吗?
[^b]
[^bog]
b
xdnvmnnf1#
对于特定的lesson,正确的regex为:
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不匹配。它确实匹配q和q后面的空格在*伊拉克是一个国家***。实际上:空格成为整体匹配的一部分,因为它是“不是u的字符”,由上面的regexp中的否定字符类匹配。如果你想让正则表达式匹配两个字符串中的q**,并且只匹配q,你需要使用negative lookahead。
negative lookahead
moiiocjp2#
^[^b]工作。^ OUTSIDE the [] s表示“字符串的开始”
^[^b]
^
[]
vs91vp4v3#
[^b]只匹配一个不是'b'的字符。[^b]+将指定RegEx组匹配一个或多个非'b'的字符。[^b]*将指定RegEx组匹配零个或多个非'b'的字符。
[^b]+
[^b]*
jei2mxaa4#
您基本上是正确的,但是[^b]仍然会匹配bog中的o和g--这意味着它是一个成功的匹配,即使它没有匹配整个字符串。[^bog]将只匹配hog中的h,dog中的d,而bog中的bog则不匹配--这意味着它不匹配bog。如果你看一下^[^b]+$,我想这会更有意义。这将匹配1+非b字符,锚定在字符串的开头(^)和结尾($)。将其与[^b]或[^bog]的初始表达式进行比较,您可以看到差异。我建议使用一个GUI RegEx测试器(前面链接的是我最喜欢的),这将真正有助于说明逻辑。
bog
o
g
hog
h
dog
d
^[^b]+$
1+
$
v09wglhw5#
您可以在flutter语言中将其与inputFormatter一起使用这将排除emoji和此特殊字符。如果你想增加数字,你也可以把它放进去。
inputFormatter: <TextInputFormatter>[ FilteringTextInputFormatter.deny(r'[¬¦्«»ΩΠμ§¡¿±·£%,!#$%&*+";:/=?^`{|}~₹)(•√π÷׶∆€¥¢°©®™✓><\[\]\\’|‘|”|“|]\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]') ]
5条答案
按热度按时间xdnvmnnf1#
对于特定的lesson,正确的
regex
为:解释:
备注:
Negated Character Classes
在左方括号后键入插入符号将否定字符类。结果是字符类匹配不在字符类中的任何字符。与点不同,否定字符类也匹配(不可见)换行符字符。如果不希望求反字符类与换行符匹配,则需要在该类中包含换行符。[^0-9\r\n]匹配任何不是数字或换行符的字符。
重要的是要记住,一个否定的字符类仍然必须匹配一个字符。q[^u]不表示:“a q后面不跟u”。它的意思是:“a q后跟一个不是u的字符”。它与字符串Iraq中的q不匹配。它确实匹配q和q后面的空格在*伊拉克是一个国家***。实际上:空格成为整体匹配的一部分,因为它是“不是u的字符”,由上面的regexp中的否定字符类匹配。如果你想让正则表达式匹配两个字符串中的q**,并且只匹配q,你需要使用
negative lookahead
。moiiocjp2#
^[^b]
工作。^
OUTSIDE the[]
s表示“字符串的开始”vs91vp4v3#
[^b]
只匹配一个不是'b'的字符。[^b]+
将指定RegEx组匹配一个或多个非'b'的字符。[^b]*
将指定RegEx组匹配零个或多个非'b'的字符。jei2mxaa4#
您基本上是正确的,但是
[^b]
仍然会匹配bog
中的o
和g
--这意味着它是一个成功的匹配,即使它没有匹配整个字符串。[^bog]
将只匹配hog
中的h
,dog
中的d
,而bog
中的bog
则不匹配--这意味着它不匹配bog
。如果你看一下
^[^b]+$
,我想这会更有意义。这将匹配1+
非b
字符,锚定在字符串的开头(^
)和结尾($
)。将其与[^b]
或[^bog]
的初始表达式进行比较,您可以看到差异。我建议使用一个GUI RegEx测试器(前面链接的是我最喜欢的),这将真正有助于说明逻辑。v09wglhw5#
您可以在flutter语言中将其与inputFormatter一起使用
这将排除emoji和此特殊字符。如果你想增加数字,你也可以把它放进去。