谁能让我知道以下正则表达式模式的含义?
Pattern p1=Pattern.compile("^1?(\\d{10})");
Pattern p2=Pattern.compile("^1?([1-9])(\\d{9})");
谁能让我知道以下正则表达式模式的含义?
Pattern p1=Pattern.compile("^1?(\\d{10})");
Pattern p2=Pattern.compile("^1?([1-9])(\\d{9})");
在我的脑海中,这些看起来像是匹配美国电话号码的正则表达式。
第一个匹配一个由 10 个数字组成的数字,如果第一个数字是 1,则匹配 11 个数字。
1?— 可选地匹配一个 1\d— 匹配 0 到 9 之间的数字(\\d在 Java 中转义){10}— 匹配前面的字符 10 次(在本例中为一个数字)第二个匹配相同的模式,除了第一个(或第二个,如果存在 1)数字不能是 0。
1?— 可选地匹配一个 1[1-9]— 匹配 1 到 9 之间的单个数字\d— 匹配 0 到 9 之间的数字(\\d在 Java 中转义){9}— 匹配前面的字符 9 次(在本例中为数字)请注意,两个表达式都以 开头^,这仅表示“仅在行首匹配”。另请注意,此处使用的括号用于捕获字符组,但不影响表达式的含义。
为了解释正则表达式,你可以随时使用这个在线解释器
正则表达式的输出:
正则表达式:^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 结尾
第一个正则表达式:
^- 行或字符串的开头
1?-1零个字符或一个重复
\d{10}字符 - 十位数字字符
第二个正则表达式:
^- 行首或字符串的开头
1?- 字符1零或重复一次
[1-9]- 任何数字字符,除了0
\d{9}- 九位数字字符