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