正则表达式为10位或11位数

时间:2013-10-16 04:53:52

标签: regex

有人能让我知道下面正则表达式模式的含义吗?

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

3 个答案:

答案 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} - 九位数字