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

cxy*_*xyz 3 regex

任何人都可以让我知道下面的正则表达式模式的含义?

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

Mat*_*ude 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次(在这种情况下,一个数字)

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