regex Grep匹配文本包围的电话

yv5phkfx  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(139)

我试图在各种文件中找到所有的电话号码,包括JSON和TXT。
匹配应基于是否有10个或11个数字字符(0-012-345-6789)或(012-345-6789)来进行,不能多也不能少。电话号码通常由文本包围,但有时由空格和制表符包围(请参阅以下示例)。电话号码有时还包括连字符“-”和括号“()”来描述号码。

abc0123456789def <- match
abc10123456789def <- match
abc10123456789def <- match
abc101234567899def <- no match (12 numbers)
abc101234567def <- no match (9 numbers)

abc 0123456789 def <- match
abc 10123456789 def <- match

abc1(012)345-6789def <- match
abc1-012-345-6789def <- match
abc(012)345-6789def <- match
abc012-345-6789def <- match
abc 1(012)345-6789 def <- match

非常感谢您的帮助!

8iwquhpp

8iwquhpp1#

如果我没记错grep,那么:

grep -iP "(?:^|(?<=\D))\d?(?:\(\d{3}\)|-?\d{3})-?\d{3}-?\d{4}(?=\D|$)"
  • (?:^|(?<=\D))-我后面是行的开头或非数字字符
  • \d?-可选前导数字
  • (?:-启动非捕获组
  • \(\d{3}\)-格式相当于(555)
  • |-或
  • -?\d{3}-格式等同于-555,连字符是可选的
  • )-结束非捕获组
  • -?\d{3}-?\d{4}-格式等同于-555-5555,带有可选连字符
  • (?=\D|$)-我前面是一个非数字字符或行尾

这里是PHP https://regex101.com/r/Gdeiq7/1

相关问题