簡體   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