在正则表达式中,^[a-zA-Z]+$
和^[a-zA-Z]*$
之间有什么区别。我也可以根据^[a-zA-Z]$
或^[a-zA-Z]
完全不包含它。
我在网上查了一下,它说+
匹配前面的字符一次或多次,*
匹配前面的字符零或一次,但我不知道这意味着什么,或者根本没有。
答案 0 :(得分:6)
+
表示1个或更多
*
表示0或更多
因此^[a-zA-Z]*$
找到一个空字符串,但不是^[a-zA-Z]+$
^[a-zA-Z]$
表示a-z和A-Z范围内的一个字母。
a+
是a
,aa
,aaa
,...,aaa...aaa
等
a*
是'',a
,aa
,aaa
,...,aaa...aaa
等
^ a $只是' a'
编辑:您还可以使用^a?$
查找{1}}的0或1次出现,因此,''或a
答案 1 :(得分:5)
^
和$
是 anchors 。它们与任何东西都不匹配,它们只是将它放在输入中的特定位置。
^
时,你告诉引擎它后面的内容必须从行的开头开始$
时,你告诉引擎它前面的任何内容都必须从行尾开始^
和$
,则告诉引擎它们之间的任何内容必须覆盖整个行端到端。现在应该很容易理解锚点之间放置的[a-zA-Z]*
和[a-zA-Z]+
之间的区别:带星号的那个允许空行,而带有加号的那个坚持匹配至少一个字符。
当你只放置一个锚时,应该很容易理解会发生什么:基本上,你让引擎忽略了开头(当^
缺失时)或者行结束时({{1}在寻找匹配时失踪了。
答案 2 :(得分:0)
^[a-zA-Z]+$
匹配大小为1或更长的任何字母字符串(由字母a-z组成,大小)。 ^和$字符表示"开始"和"结束"该行,所以他们只匹配由一个"字"。
^[a-zA-Z]*S
类似,只有星号(*)表示"没有或任何数量的"前面的字符/组。 S只是一个S并且恰好匹配一个S.基本上整个事物匹配从行开始处开始的任何字符串,包含任意数量的字母并以S结束。其他事情可以在S之后,但是因为没有使用$,所以不必结束那里。
答案 3 :(得分:0)
^[a-zA-Z]+$
[a-zA-Z] +匹配下面列表中的单个字符
量词:+在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
a-z a和z之间范围内的单个字符(区分大小写)
A-Z A和Z之间范围内的单个字符(区分大小写)
$断言字符串末尾的位置
因此,这基本上会匹配任何字母Foo
,Bar
,sdasndjkasnd
字符串
但与asds2
,ab c
,@23
无法匹配等任何其他内容都不匹配
^[a-zA-Z]*S
[a-zA-Z] *匹配下面列表中的单个字符
量词:*在零和无限次之间,尽可能多次,根据需要回馈[贪心]
a-z a和z之间范围内的单个字符(区分大小写)
A-Z A和Z之间范围内的单个字符(区分大小写)
S字面匹配字符S(区分大小写)
这将匹配相同但你必须在比赛结束时有一个大写字母S.
例如BallS
,FooS
,BarS
将匹配 - ASzs
将匹配[AS]
Balls
,Foos
虽然无法匹配