PHP正则表达式

使用函数

PHP中, preg_matchpreg_match_all 均支持正则表达式. 两者的主要区别是, preg_match_all 能获取所有的匹配项.

测试网站

oschina上有专用的测试工具 http://tool.oschina.net/regex/ 对于正则表达式的调试, 可以使用该网站.

正则匹配遇到的问题

最近几天做爬虫抓取, 需要分析网页中的元素. 过程中遇到了几个涉及到中文匹配的错误. 数据大概是这个样子的.

<span class="cate_menu_line">/</span>                     <a target="_blank" class="cate_menu_lk" href="//channel.ooxx.com/furniture.html">家具</a>
<span class="cate_menu_line">/</span>                     <a target="_blank" class="cate_menu_lk" href="//channel.ooxx.com/decoration.html">家装</a>
<span class="cate_menu_line">/</span>                     <a target="_blank" class="cate_menu_lk" href="//channel.ooxx.com/kitchenware.html">厨具</a>

正则里面除了特殊符号转义, 主要就是中文了.

第一个版本: /<a target="_blank" class="cate_menu_lk" href="([a-z\.\/]+)">(\w+)<\/a>/ , 该版本尝试通过\w+来匹配中文, 其实根本就没法匹配.

第二个版本: /<a target="_blank" class="cate_menu_lk" href="([a-z\.\/]+)">([\u4e00-\u9fa5]+)<\/a>/ [\u4e00-\u9fa5]+ 可以匹配中文, 结果报错: Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N, \U, or \u at offset . \u9fa5 这种模式, 是perl正则的模式, 在php中需要被替换为: \x{9fa5}

第三个版本: /<a target="_blank" class="cate_menu_lk" href="([a-z\.\/]+)">([\x{4e00}-\x{9fa5}]+)<\/a>/ 报错: Warning: preg_match() [function.preg-match]: Compilation failed: character value in \x{...} sequence is too large at offset 原因是正则结尾需要 u

最终版本: /<a target="_blank" class="cate_menu_lk" href="([a-z\.\/]+)">([\x{4e00}-\x{9fa5}]+)<\/a>/u

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值