Regex 10位或11位的正则表达式
有人能告诉我下面正则表达式模式的含义吗Regex 10位或11位的正则表达式,regex,Regex,有人能告诉我下面正则表达式模式的含义吗 Pattern p1=Pattern.compile("^1?(\\d{10})"); Pattern p2=Pattern.compile("^1?([1-9])(\\d{9})"); 第一个正则表达式: ^-行或字符串的开头 1?-字符1零或一次重复 \d{10}-十位字符 第二个正则表达式: ^-行或字符串的开头 1?-字符1零或一次重复 [1-9]-除0 \d{9}-九位字符在我的头顶上,这些看起来像正则表达式来匹配我们的电话号码 第一个数字匹配
Pattern p1=Pattern.compile("^1?(\\d{10})");
Pattern p2=Pattern.compile("^1?([1-9])(\\d{9})");
第一个正则表达式:
^
-行或字符串的开头1?
-字符1
零或一次重复\d{10}
-十位字符
第二个正则表达式:
^
-行或字符串的开头1?
-字符1
零或一次重复[1-9]
-除0
\d{9}
-九位字符在我的头顶上,这些看起来像正则表达式来匹配我们的电话号码
第一个数字匹配由10位数字组成的数字,如果第一个数字是1,则匹配由11位数字组成的数字
-可选择匹配11?
-匹配0和9之间的数字(在Java中转义为\d
)\\d
-将前面的字符匹配10次(在本例中为数字){10}
-可选择匹配11?
-匹配1到9之间的一个数字[1-9]
-匹配0和9之间的数字(在Java中转义为\d
)\\d
-将前面的字符匹配9次(在本例中为数字){9}
请注意,这两个表达式都以
^
开头,这意味着“仅在行首匹配”。还请注意,此处使用的括号用于捕获字符组,但不影响表达式的含义。要解释正则表达式,您始终可以使用
正则表达式的输出:
Regex: ^1?(\d{10})
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
1? '1' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
\d{10} digits (0-9) (10 times)
--------------------------------------------------------------------------------
) end of \1
正则表达式:^1(\d{10})
节点解释
--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
1? '1'(可选)(匹配最大金额
(可能的)
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
\d{10}位(0-9)(10次)
--------------------------------------------------------------------------------
)结束\1
正则表达式:^1([1-9])(\d{9})
节点解释
--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
1? '1'(可选)(匹配最大金额
(可能的)
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
[1-9]任何“1”到“9”的字符
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
(分组并捕获到\2:
--------------------------------------------------------------------------------
\d{9}位(0-9)(9次)
--------------------------------------------------------------------------------
)结束\2
模式p1=Pattern.compile(“^1”(\\d{15})”;它是否匹配强制不以0开头的15位数字?它匹配不以1开头的15位数字,或者匹配以1开头的16位数字。
?
表示可选。如果您选择了“^1(\\d{14})”,则将匹配一个15位数字,该数字强制以1开头(一个[非可选]1,后跟14位其他数字)。如果您想要一个表达式匹配第一个非零的15位数字,它将是“^[1-9]\\d{14}”
(并且您可以选择在要捕获的部分周围加上一些括号)。知道“\\d”
扩展为“[0-9]”
,可能会有所帮助,因此,我在前面的评论中给出的表达式可以同样容易地写成“^[1-9][0-9]{14}”
,这非常清楚地表明它是“一个介于1和9之间的数字,后面是14个介于0和9之间的数字”。
Regex: ^1?([1-9])(\d{9})
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
1? '1' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
[1-9] any character of: '1' to '9'
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
( group and capture to \2:
--------------------------------------------------------------------------------
\d{9} digits (0-9) (9 times)
--------------------------------------------------------------------------------
) end of \2