前几天因为在做学校教务处的爬虫,用php抓取的成绩和课程表竟然返回的是html格式的数据,也是很醉。没办法,干脆用正则匹配吧。因为之前并没有学过正则表达式,只好恶补了一下。在匹配的过程中遇到了一些问题,特别是在匹配中文的时候,很是蛋疼。下面说一下我的学习成果。

  1. 使用php在匹配中文的时候不能使用 \w 来匹配,可以使用元字符 . 来粗略匹配中文
  2. 精确匹配中文时需要考虑编码环境,gb2312和 utf-8。这两种编码有什么区别呢 ? 最主要的就是gb2312编码的汉字占两个字节,而utf-8编码的汉字占3个字节。

一、好了,下面进入正题,如果你想匹配中文的话,可以采用下面的表达式:

utf-8编码:

[\x{4e00}-\x{9fa5}]

例如:匹配5个汉字,便可以这么写:

/[\x{4e00}-\x{9fa5}]{5}/u

千万注意,这个最后面的u一定要加上(如果是使用php的话),否则是无法正常匹配的。
二、通过上面的表达式我们可以匹配一段模糊的中文,那如果我们想要匹配精准的某个字或者词语呢 ?例如,我在做教务处爬虫时,抓取到的成绩不仅仅只是数字,还有优秀、通过、良好等。这种我们总不能漏掉吧? 可以使用下面的方式来匹配:

1. 先将汉字转换成为16进制Unicode编码,可以在这个网站方便的转换:Unicode与中文互转 16进制Unicode编码转换、还原

例如我们将 优秀 两个字转换成了该编码,为 :  \u4f18\u79c0

2. 匹配 优秀 两个汉字的正则表达式如下:

/\x{4f18}\x{79c0}/u

想必大家应该已经明白了,拿到16进制编码后,有这么几步,将u改为x, 再将具体的16进制编码加上{ },最后不要忘记加上u

三、包含换行段落的匹配

先给出一段需匹配的代码:

<span style="white-space:pre">  </span><tr class="H"><td class="td0" style='width:5%;padding:0px;' colspan='2'></td><td class='td0' style="width:13%;height:20px;">星期一</td><td class='td0' style="width:13%;height:20px;">星期二</td><td class='td0' style="width:13%;height:20px;">星期三</td><td class='td0' style="width:13%;height:20px;">星期四</td><td class='td0' style="width:13%;height:20px;">星期五</td><td class='td0' style="width:13%;height:20px;">星期六</td><td class='td0' style="width:13%;height:20px;">星期日</td>
<span style="white-space:pre"> </span></tr>

我们的目标是从这段html代码中抓取星期一   —  星期日,有人可能会说,直接匹配td标签,来个for循环就好了吗,但现在我只是给出一个例子,很多时候我们拿到的数据并不像这样有规律,所以成段匹配还是很有必要的。

我一开始尝试的方法是从<tr>匹配到</tr>, 将其中的汉字全部抓出来 ,但很不幸,失败了。原因就是在于其中的换行,那我们怎样才能匹配包含换行的文本呢 ?其实方法很简单,只要使用这个表达式:/[.\s\S]*/

我曾经试过使用 /[.\n]/  来匹配,但是并不可以。上面的表达式完美的解决了问题。

如何用正则表达式匹配中文相关推荐

  1. Oracle正则表达式匹配中文的问题

    查资料知道中文Unicode范围是\u4e00 - \u9fa5 可是自己用来正则表达式匹配中文总是用不了Unicode.最简单举例: select regexp_replace('abc秋歌def' ...

  2. Notepad++中用正则表达式匹配中文

    通常正则表达式匹配中文可以利用Unicode的特点,使用[\u4e00-\u9fa5]匹配.但在Notepad++中不能正常使用. 解决方法是,首先将编码转换成Unicode(菜单->格式-&g ...

  3. python正则匹配中文_python 正则表达式匹配中文-阿里云开发者社区

    python 正则表达式匹配中文 文件编码为 utf-8 设置默认编码为 utf-8 中文需要转换为 \u 形式的编码,也就是  编码, 轮换方法,cmd 下执行 python 进入 python 命 ...

  4. re 正则表达式匹配中文

    之前踩过一个坑, 用正则表达式匹配中文字符:[^\x00-\xff] 最后发现这个是匹配非单字节字符, 表示的是0- 255 的ASCII码值 import re r = re.compile('[^ ...

  5. 【转】正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度

    [转]正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度 using System.Text.RegularExpressions; 匹配中文:[\u4e00-\u9fa5] 英文字母:[a ...

  6. php中文的正则表达式_php 正则表达式匹配中文汉字

    文章告诉你如何利用php 正则表达式匹配中文汉字哦,下面我们主要讲利用preg_match mb_eregi来验证汉字,并且正则过程出现问题的解决方法. preg_match("/[a-z] ...

  7. perl正则表达式匹配中文

    perl正则表达式匹配中文:/[^u4E00-u9FA5]/ js中正则表达式匹配中文:match(/[\u4E00-\u9FA5]/)

  8. hive正则表达式匹配中文或者字符

    hive正则表达式匹配中文或者字符 regexp_replace() regexp_extract() regexp_replace() 案例1: select regexp_replace('四川成 ...

  9. PHP正则表达式匹配中文

    PHP正则表达式匹配中文 php中目前支持的是由PCRE库提供的正则函数,以"preg_"为前缀命名,在PCRE中若是要匹配中文字符,需要将模式修饰符设置为"u" ...

最新文章

  1. 关于刘冬大侠Spring.NET系列学习笔记3的一点勘正
  2. 如何在返回String的Spring MVC @ResponseBody方法中响应HTTP 400错误?
  3. matlab讨论资金积累,资金积累、国民收入与人口增长的关系综合评估
  4. 利用套接字实现 CS 模型
  5. 红帽 jboss_红帽峰会2015所需的JBoss BPM内容指南
  6. hbase动态更改行键设计_谈笑间学会Hbase Rowkey设计
  7. java开关语句_Java中嵌套开关语句的替代方法
  8. python代码实现中心化_数据预处理——标准化(附python代码)
  9. android studio打测试包,AndroidStudio1.5上进行单元测试(简单)
  10. salesforce 学习(超简介,以及传送门)
  11. python下载文件的11种方式_python 下载文件的多种方法汇总
  12. C6000 DSP技术深度探索---链接命令文件(cmd)
  13. 朴素贝叶斯分类器常用的三种条件概率模型:伯努利、多项式、高斯模型
  14. pre-receive hook declined
  15. LoRaWAN节点和网关接入阿里LinkWAN
  16. Taven教授:解决失眠的好办法
  17. PTA最短工期 详细解释 为什么最短反而是最长?
  18. 事件A和B之间相互独立与互不相容的理解
  19. OSChina 周四乱弹 —— 下班等通知,我张北华同意后才下班
  20. EditPlus 5.0.651 中文版

热门文章

  1. 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校2019级新生报到、军训工作安排通知...
  2. NetBSD 从pkgsrc安装软件
  3. MavenCentral发布指南
  4. 谈一谈|创新创业训练营结业思考分享
  5. 敏捷实践之产品展示SHOW CASE
  6. 【愚公系列】2023年06月 攻防世界-Web(i-got-id-200)
  7. 每日一题(十)function showCase(value){ switch(value){ case 'A': console.log('case
  8. 导出PDF文件中文显示不完整
  9. AI模型工业部署:综述【常用的部署框架:TensorRT、Libtorch】【常见提速方法:模型结构、剪枝、蒸馏、量化训练、稀疏化】【常见部署流程:onnx2trt】【常见服务部署搭配】
  10. adams打不开提示msc license_安装adams后,打开时弹出的错误,如何修改才能用?