【问题标题】:PHP RegEx to Extract Phone NoPHP RegEx 提取电话号码
【发布时间】:2013-09-21 20:25:14
【问题描述】:
bid=
id=3D46799862
03005134012
 +92-345-540700(8)
(00996)-345.(123)/4567 
 bidid=3D46799862). +966 235 123456/7
    * Need to make a payment?  You can do it here (https://www.elance.com/p=+92 123 4567891
hp/project/main/projectInvoices.php?bidid=3D46799862).
    /receivingpmbmessages.html).
<a href=3D"http://help.elance.com/entries/20992337-valign=3D"bottom" style=3D"font-s=
ize:10px; color:#817f80;padding:0px;margin:0px;">1-877-435-2623 | Mon-Fri 8=

http://rubular.com/r/U0YZQ0GlbZ进行测试
正则表达式(\d|\+)(\+|\d|\(|\)|-| |\.){7,}\b
预期匹配:

  1. 03005134012
  2. +92-345-540700(8)
  3. (00996)-345.(123)/4567
  4. +966 235 123456/7
  5. +92 123 4567891
  6. 1-877-435-2623

不正确的匹配:

  1. 匹配46799862,但应该被忽略,因为完整的单词是3D46799862
  2. 匹配+92-345-540700(8,它应该匹配+92-345-540700(8)
  3. 匹配00996)-345.(123,但它应该匹配(00996)-345.(123)/4567
  4. 匹配46799862). +966 235 123456,但它应该匹配+966 235 123456/7
  5. 匹配20992337-,但它应该被忽略,因为它的/20992337-valign=

【问题讨论】:

  • 那么你的问题是什么?
  • 不知道是否有帮助,但Elance have an API。你能通过它以更强大的方式获得你需要的东西吗?
  • 我的问题很简单,我需要提取正确的匹配项,但我的正则表达式不正确。应该怎样
  • 你的回答很糟糕,我在 cmets 有一个问题

标签: php regex email extract phone-number


【解决方案1】:

我假设您不需要只匹配 6 个预期匹配项的正则表达式。

这个正则表达式就是这样做的。

(?<!(?:\w|\/))(?:\d|\+|\()[\d ()\/\.-]+(?!\w)

它必须以 \d、+ 或 (。但前提是前面没有 \w 或 /。

然后只消耗一个或多个 [\d ()/.-] 但如果它以 \w 结尾则不消耗

编辑

(?&lt;...) 是负面的后视。在这种情况下,这意味着前面的字符无法匹配正则表达式...

(?!...) 是负前瞻。所以像上面这意味着下一个字符不能匹配正则表达式...

以上两个结构都是非消耗的。

(?:...) 是一个非捕获组

【讨论】:

  • 你能解释一下你的正则表达式吗?我不知道什么是“
  • Google 正则表达式和前瞻/后视是非消耗性断言
【解决方案2】:
(\d|\+|\()(\+|\d|\(|\)|-| |\/){7,}(\d|\))+\b  

这样更准确……

【讨论】:

  • 你能详细说明原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
相关资源
最近更新 更多