Regex 在正则表达式中使用*有什么意义

Regex 在正则表达式中使用*有什么意义,regex,Regex,最近我在想为什么我们需要正则表达式中的*。例如,如果我们想要表示A0,A1..,Z99,我们可以: [A-Z][0-9][0-9]* 但根据上述规定,A0A(这不是我们想要的)也是有效的。这个*给了我什么好处 但是A0A(我们不想要的)也是有效的 不,它无效,您只需要使用锚定: ^[A-Z][0-9][0-9]*$ ^将确保在行首匹配,而$将确保在行尾匹配 此外,如果只有第二位数字是可选的,则最好使用: ^[A-Z][0-9][0-9]?$ 因为*匹配0次或多次,而?匹配0次或1次 但是A

最近我在想为什么我们需要正则表达式中的*。例如,如果我们想要表示A0,A1..,Z99,我们可以:

[A-Z][0-9][0-9]*
但根据上述规定,
A0A
(这不是我们想要的)也是有效的。这个*给了我什么好处

但是A0A(我们不想要的)也是有效的

不,它无效,您只需要使用锚定:

^[A-Z][0-9][0-9]*$
^
将确保在行首匹配,而
$
将确保在行尾匹配

此外,如果只有第二位数字是可选的,则最好使用:

^[A-Z][0-9][0-9]?$
因为
*
匹配0次或多次,而
匹配0次或1次

但是A0A(我们不想要的)也是有效的

不,它无效,您只需要使用锚定:

^[A-Z][0-9][0-9]*$
^
将确保在行首匹配,而
$
将确保在行尾匹配

此外,如果只有第二位数字是可选的,则最好使用:

^[A-Z][0-9][0-9]?$

因为
*
匹配0次或多次,而
匹配0次或1次。

似乎您正在尝试匹配以大写字母开头的字符串,以下数字范围为1到99

^[A-Z][1-9]?[0-9]$

^
断言我们在开始,而
$
断言我们在结束。所以这有助于进行精确的字符串匹配。它在字符串或行的中间、开头或结尾不匹配。也就是说,
[A-Z][1-9]?[0-9]
将匹配
fooA10
字符串中的
A10
,但是
^[A-Z][1-9]?[0-9]$
将不会在
fooA10
字符串中产生匹配。

似乎您正在尝试匹配以大写字母开头的字符串,以下数字范围为1到99

^[A-Z][1-9]?[0-9]$

^
断言我们在开始,而
$
断言我们在结束。所以这有助于进行精确的字符串匹配。它在字符串或行的中间、开头或结尾不匹配。也就是说,
[A-Z][1-9]?[0-9]
将匹配
fooA10
字符串中的
A10
,但
^[A-Z][1-9]?[0-9]$
将不会在
fooA10
字符串中产生匹配。

*
只是一个量词,在零次和无限次之间匹配

[A-Z][0-9][0-9]*
匹配A0、A1..、Z99以及A10000、Z123456789

请记住,如果您不将
^
$
作为锚定,处理器将匹配指定的部分,并返回
true
,即使输入包含更多字符,因为您并不是说只有当整个输入与正则表达式匹配时,才希望得到正结果

如果您的目标是只匹配A0、A1..、Z99,则正则表达式应为:

^[A-Z][0-9][0-9]?$
或者简单地说:

^[A-Z]\d{1,2}$
\d
表示“数字”,与
[0-9]
相同。
{1,2}
表示至少1次且不超过2次。
也是一个量词,匹配0或1次。

*
只是一个量词,匹配0和无限次

[A-Z][0-9][0-9]*
匹配A0、A1..、Z99以及A10000、Z123456789

请记住,如果您不将
^
$
作为锚定,处理器将匹配指定的部分,并返回
true
,即使输入包含更多字符,因为您并不是说只有当整个输入与正则表达式匹配时,才希望得到正结果

如果您的目标是只匹配A0、A1..、Z99,则正则表达式应为:

^[A-Z][0-9][0-9]?$
或者简单地说:

^[A-Z]\d{1,2}$
\d
表示“数字”,与
[0-9]
相同。
{1,2}
表示至少1次且不超过2次。
也是一个量词,匹配0或1次。

+=>1+匹配*=>0+匹配so,当我们说正则表达式时,我们总是指^some_expr$?在大多数情况下使用锚定更安全,但是如果您试图匹配多个匹配,则首选单词边界,如
\b[a-Z][0-9][0-9]*\b
还可以更好地理解单词边界。+=>1+匹配*=>0+匹配所以,当我们说正则表达式时,我们总是指^some_expr$?在大多数情况下,使用锚定更安全,但是如果您试图匹配多个匹配,则首选单词边界,如
\b[A-Z][0-9][0-9]*\b
也可以更好地理解单词边界。所以,当我们说正则表达式时,我们总是指^some_expr$?所以,当我们说正则表达式时,我们总是指^some_expr$?啊..我开始明白了,我刚刚尝试了^only和$only,它们也匹配任何东西。这是为什么?
^
$
单独表示您希望分别匹配输入的开始或结束。每种输入都有这两种。所以只有其中一个的正则表达式是没有意义的。啊..我开始明白了,我刚刚尝试了^only和$only,它们也匹配任何东西。这是为什么?
^
$
单独表示您希望分别匹配输入的开始或结束。每种输入都有这两种。因此,只有其中一个的正则表达式是没有意义的。