3

谁能让我知道以下正则表达式模式的含义?

Pattern p1=Pattern.compile("^1?(\\d{10})");
Pattern p2=Pattern.compile("^1?([1-9])(\\d{9})");
4

3 回答 3

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 次(在本例中为数字)

请注意,两个表达式都以 开头^,这仅表示“仅在行首匹配”。另请注意,此处使用的括号用于捕获字符组,但不影响表达式的含义。

于 2013-10-16T04:59:39.597 回答
3

为了解释正则表达式,你可以随时使用这个在线解释器

正则表达式的输出:

正则表达式:^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 结尾
于 2013-10-16T05:09:05.060 回答
0

第一个正则表达式:

^- 行或字符串的开头
1?-1零个字符或一个重复
\d{10}字符 - 十位数字字符

第二个正则表达式:

^- 行首或字符串的开头
1?- 字符1零或重复一次
[1-9]- 任何数字字符,除了0
\d{9}- 九位数字字符

于 2013-10-16T04:59:26.603 回答