繁体   English   中英

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

[英]Capturing multiple phone numbers with 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

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

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

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

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

请记住,破折号-不是单词字符,因此\\b将在1--5之间匹配,依此类推。 另外,您当前的正则表达式是贪婪的 -它将尝试使用repeat匹配尽可能多的字符. ,这就是为什么它一直到第一行的末尾的原因(因为该行中的最后一个字符与\\b匹配)。 但是,使其变得懒惰(使用.+? )将无法修复它,因为它会在1-5411之后终止(因为1-之间是单词边界)

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

\+([\d-]+)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM