簡體   English   中英

正則表達式匹配除以正斜杠開頭的數字以外的所有數字

[英]Regex to match all numbers except those starting with Forward slashes

我有一個正則表達式來匹配格式為電話號碼或類似於電話號碼的號碼。 我必須省略以正斜杠開頭的數字,因為它可能是 URL 的一部分。 我使用了以下正則表達式。 它適用於所有情況,但任何在句子起始點沒有正斜杠的數字都會被正則表達式忽略。 誰能幫我解決這里的錯誤?

/[^\\/0-9](\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{2,3}[\\s.-]?\\d{3}/i

測試案例 1:

23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 5454545454

輸出 1:(匹配以粗斜體表示)

23242424 242424242 2424242442 4 2424244242 2421212121212分之242424241 05454545454 5454045454 0115545454/454545454

測試案例2:(第一個數字前面的空格)

23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 045454545454

輸出 2:(匹配以粗斜體表示)

23242424 242424242 2424242442 4 2424244242 2421212121212分之242424241 05454545454 5454045454 0115545454/454545454

您可以使用否定后視而不是否定字符類來匹配字符串位置的開頭:

'/(?<![\/0-9])(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{2,3}[\s.-]?\d{3}/'
  ^^^^^^^^^^^^

查看正則表達式演示

在此, (?<![\\/0-9])是匹配不立即前面有一個正斜杠或數字的位置處的負回顧后發。

請注意,您不需要不區分大小寫的修飾符,除非這是您也匹配字母的較長模式的一部分。

我的方法很殘酷,但我會在搜索數字之前簡單地從主字符串中刪除任何以 / 開頭的數字。 類似於$str = preg_replace('/\\/\\d+/', '', $str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM