使用正则表达式捕获多个电话号码

时间:2018-07-29 05:20:35

标签: regex

我正在尝试使用正则表达式进行改进,因为我厌倦了经常不得不查找现有解决方案而不是创建自己的解决方案。有点难以理解为什么它不起作用:

尝试从以下字符串中提取两个电话号码(数字和地址是随机的):

+1-541-754-3010 156 Alphand_St. <J Steeve>\n 133, Green, Rd. <E Kustur> NY-56423 ;+1-541-914-3010\n"

所以我使用以下表达式:

 /\+(.+)(?:\s|\b)/

这些是我回来的比赛:

  1. 1-541-754-3010 156 Alphand_St。
  2. 1-541-914-3010

所以我正确地得到了最后一个,但是没有正确地得到。根据表达式,它应该匹配+和空格/边界之间的任何内容。但是由于某种原因,它并没有在第一个数字之后停下来。我会用这种错误的方式吗?

2 个答案:

答案 0 :(得分:0)

按照您为搜索字符串提供的格式,并且由于您以文字“ +”开头,因此我只需要包含下一个十进制字符串和分隔符,例如连字符:

/\+([0-9\-]+)/

您的“。+”表示匹配所有内容,直到出现\ s。但是,在通往\ s的途中还包括\ s。

答案 1 :(得分:0)

请记住,破折号-不是单词字符,因此\b将在1--5之间匹配,依此类推。另外,您当前的正则表达式为 greedy -它将尝试使用重复的.匹配尽可能多的字符,这就是为什么它一直一直到第一个结束的原因行(因为该行中的最后一个字符与\b匹配)。不过,使其变得懒惰(使用.+?)并不能解决它,因为那样的话它会在1中的1-541之后终止(因为1-之间是单词边界)

尝试使用数字字符集和-代替:

\+([\d-]+)

https://regex101.com/r/ktbcHJ/1