正则表达式:+ $ VS * $ VS无

时间:2015-12-15 14:41:12

标签: regex

在正则表达式中,^[a-zA-Z]+$^[a-zA-Z]*$之间有什么区别。我也可以根据^[a-zA-Z]$^[a-zA-Z]完全不包含它。

我在网上查了一下,它说+匹配前面的字符一次或多次,*匹配前面的字符零或一次,但我不知道这意味着什么,或者根本没有。

4 个答案:

答案 0 :(得分:6)

+表示1个或更多 *表示0或更多

因此^[a-zA-Z]*$找到一个空字符串,但不是^[a-zA-Z]+$

^[a-zA-Z]$表示a-z和A-Z范围内的一个字母。

a+aaaaaa,...,aaa...aaa

a*是'',aaaaaa,...,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之间范围内的单个字符(区分大小写)
$断言字符串末尾的位置

因此,这基本上会匹配任何字母FooBarsdasndjkasnd字符串
但与asds2ab c@23无法匹配等任何其他内容都不匹配

^[a-zA-Z]*S

[a-zA-Z] *匹配下面列表中的单个字符
量词:*在零和无限次之间,尽可能多次,根据需要回馈[贪心]
a-z a和z之间范围内的单个字符(区分大小写)
A-Z A和Z之间范围内的单个字符(区分大小写)
S字面匹配字符S(区分大小写)

这将匹配相同但你必须在比赛结束时有一个大写字母S.

例如BallSFooSBarS将匹配 - ASzs将匹配[AS]
BallsFoos虽然无法匹配