Regex 在正则表达式中使用*有什么意义
最近我在想为什么我们需要正则表达式中的*。例如,如果我们想要表示A0,A1..,Z99,我们可以: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
[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,它们也匹配任何东西。这是为什么?^
或$
单独表示您希望分别匹配输入的开始或结束。每种输入都有这两种。因此,只有其中一个的正则表达式是没有意义的。