Regex适用于测试站点但不适用于PHP

时间:2017-06-27 02:44:49

标签: php regex

如果数据被标签分隔,就像我可以看到DOM /解析器,但我从一个文本块中选择信息。我已经知道我需要的是正则表达式。这个问题是为什么我的正则表达式不起作用。除了正则表达式之外,没有人发现更好的选择。

所以我从这个链接加载了html: http://www.saq.com/webapp/wcs/stores/servlet/SAQStoreLocatorSearchResultsStoreDetailsView?storeLocationId=10180&catalogId=50000&langId=-1&storeIdentifier=23165&storeId=20002

只对这一点感兴趣:

 <h2 class="titre filet-bottom3">Coordinates</h2>
               <p>
                  585, avenue St-Charles<br />
                  Vaudreuil-Dorion, Québec<br />
                  J7V8P9                                  
               </p>
               <p>
                  Phone number&nbsp;: 450 455-9347                   <br />
                  Fax&nbsp;:  450 455-5852                   
               </p>

任务是提取电话号码,地址,城市等信息。我决定使用正则表达式,因为它适用于此HTML中的其他位。但是对于这个文本块,它没有采取。

所以这个正则表达式我......在regex101.com上发布了

/Coordinates<\/h2>\s+<p>\s+(.+), (\D+)<br \/>\s+(\D+),\s+(\D+)<br \/>\s+(\D\d\D\d\D\d)\s+<\/p>\s+<p>\s+P.+;:.(\d{3} \d{3}-\d{4}).+\s+F.+;:(.+|.+(\d{3} \d{3}-\d{4}))/gi

它适用于regex101.com,因为在捕获组中提取了我想要的信息。

但是当我使用这个来加入PHP时:

$regex = '/Coordinates<\/h2>\s+<p>\s+(.+), (\D+)<br \/>\s+(\D+),\s+(\D+)<br \/>\s+(\D\d\D\d\D\d)\s+<\/p>\s+<p>\s+P.+;:.(\d{3} \d{3}-\d{4}).+\s+F.+;:(.+|.+(\d{3} \d{3}-\d{4}))/gi';
preg_match($regex, $data, $match);

我得不到比赛。我能够使用此方法提取其他信息,例如地图坐标。有一个更好的方法吗?如果不是为什么它不起作用。

谢谢!

0 个答案:

没有答案