Ruby Ruby 里面如何将 电话号码 手机号码全部匹配出来?

ruby_xi · 2015年12月24日 · 最后由 KoALa 回复于 2015年12月25日 · 3390 次阅读

"

400-669-4525

\r\n\r\n

15001787892

\r\n\r\n \r\n" 请问如何使用正则表达式将里面的电话号码全部匹配出来。
标题的语法是不是有问题?

自己写正则,但准不准确我就不知道了 iOS 里面也有很多把号码显示连接的动作,会有误杀的情况

m = /^<p>(\d+-\d+-\d+).+<p>(\d+)/.match(...)

#2 楼 @huacnlee iOS 里面倒是会 因为刚刚接触 ruby 所以很多地方不懂。从 iOS 转过来的。公司安排来学 ruby

#1 楼 @rei 恩恩 问题的标题是有问题 以后会注意的 第一次发帖子,还请多多包涵。

#3 楼 @adamshen 谢谢了,我试试哦。

分别是 m[1] 和 m[2]

m = /^<p>(\d+-\d+-\d+).+<p>(\d+)/.match(%q[<p>400-669-4525</p>\r\n\r\n<p>15001787892</p>\r\n\r\n<div id=\"xunlei_com_thunder_helper_plugin_d462f475-c18e-46be-bd10-327458d045bd\"> </div>\r\n")])
m[1]
# => 400-669-4525
m[2]
# =>  15001787892

400-669-4525

\r\n\r\n

15001787892

#7 楼 @adamshen

400-669-4525

\r\n\r\n

15001787892 返回的数据是这样的哦

#9 楼 @ruby_xi 那是整个 MatchData 对象 你看上面 取 m[1] 和 m[2]

#10 楼 @adamshen 您好,现在我这里出现各种情况的富文本需要解析的,但是套用你的方法不能全部成功,只要上面格式的才会成功哦。

#10 楼 @adamshen 下面这个是复杂点的

15021170067 15001787892    15001787892      15001787892

\r\n\r\n

15001787892

\r\n\r\n

 

\r\n\r\n

15001787892

\r\n\r\n \r\n

#10 楼 @adamshen

15021170067 400-695-8541    15001787892      15001787892

\r\n\r\n

400-665-5632

\r\n\r\n

 

\r\n\r\n

15001787892

\r\n\r\n \r\n

#14 楼 @ruby_xi 如果文本格式很多样化,建议不要用正则表达式了,自己去写个方法吧。

不知为何,我发现 match 总是匹配第一个就返回了,用 scan 将其全部查找出来:

a = "<p>15021170067&nbsp;400-695-8541 &nbsp; &nbsp;15021170067 &nbsp; &nbsp; &nbsp;15021170067</p>\\r\\n\\r\\n<p>400-665-5632</p>\\r\\n\\r\\n<p>&nbsp;</p>\\r\\n\\r\\n<p>15021170067</p>\\r\\n\\r\\n<div id=\\\"xunlei_com_thunder_helper_plugin_d462f475-c18e-46be-bd10-327458d045bd\\\">&nbsp;</div>\\r\\n"
b = []
re = /\d{11}|\d+-\d+-\d+/
a.scan(re) { |x| b << x}
a.match re     
=> #<MatchData "15021170067">

这样就可以了,请问如何开启 match 全部匹配的模式,默认好像职匹配第一个。我 ruby 的版本是 2.1.5,难道是新特性?

如果是 html 的话还可以用Nokogiri

需要 登录 后方可回复, 如果你还没有账号请 注册新账号