博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读《学习正则表达式》(2)
阅读量:6357 次
发布时间:2019-06-23

本文共 3850 字,大约阅读时间需要 12 分钟。

  hot3.png

读《学习正则表达式》(2)

第6章 匹配Unicode和其他字符

匹配ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)范围之外的字符。

测试文本法文:

"Qu’est-ce que la tolérance? c’est l’apanage de l’humanité. Nous sommes tous pétris de faiblesses et d’erreurs; pardonnons-nous réciproquement nos sottises, c’est la première loi de la nature." —Voltaire (1694–1778)

测试文本日文:

古池蛙飛び込む水の音	—芭蕉 (1644–1694)At the ancient ponda frog plunges intothe sound of water.	—Basho (1644–1694)

测试文本德文:

An die Freude.Freude, schöner Götterfunken,Tochter aus Elisium,Wir betreten feuertrunkenHimmlische, dein Heiligthum.Deine Zauber binden wieder, was der Mode Schwerd getheilt;Bettler werden Fürstenbrüder,wo dein sanfter Flügel weilt.Seid umschlungen, Millionen!Diesen Kuß der ganzen Welt!Brüder, überm Sternenzeltmuß ein lieber Vater wohnen.

6.1 匹配Unicode字符

# 匹配法文中的é\u00e9\xe9# 匹配日文中的池\u6c60# 匹配长破折号\u2014

6.2 使用八进制数匹配字符

\351\u00e9

6.3 匹配Unicode字符属性

6.4 匹配控制字符

6.5 本章所学

  • 如何使用\uxxxx或\xxx匹配任意Unicode字符
  • 如何在vim中使用%xxx
  • 如何用八进制格式\ooo匹配0-255范围内的字符
  • 如何通过\p{x}来使用Unicode字符属性
  • 如何用\e或\cH匹配控制字符

第7章 量词

测试文本

1223334444555556666667777777888888889999999990000000000

7.1 贪心、懒惰和占有

贪心:

量词默认是贪心的。会首先匹配整个字符串,尝试匹配失败时,回退一个字符后再次尝试,这个过程叫回溯。三种方式,贪心对资源的消耗最大

懒惰:

也叫勉强,从目标的起始位置开始尝试寻找匹配。

普通量词后加?就是懒惰量词了

占有:

会覆盖整个目标然后尝试寻找匹配内容,但它只尝试一次,不会回溯。

普通量词后加+就是占有量词了

7.2 用*、+和?进行匹配

.*9*

基本量词

?	零个或一个+	一个或多个*	零个或多个

7.3 匹配特定次数

范围语法总结

{n}		精确匹配n次{n,}	匹配n次或更多次{m,n}	匹配m次至n次{0,1}	与?相同{1,0}	与+相同{0,}	与*相同

7.4 懒惰量词

懒惰量词

??		懒惰匹配零次或一次+?		懒惰匹配一次或多次*?		懒惰匹配零次或多次{n}?	懒惰匹配n次{n,}?	懒惰匹配n次或多次{m,n}?	懒惰匹配m至n次

7.5 占有量词

占有量词

?+++*+{n}+{n,}+{m,n}+

7.6 本章所学

  • 贪心式、懒惰式以及占有式匹配的区别
  • 如何匹配一次或多次(+)
  • 如何进行可选匹配(?,零次或一次)
  • 如何匹配零次或多次(*)
  • 如何使用{m,n}量词
  • 如何使用贪心、懒惰(勉强)以及占有量词

第8章 环视

环视是一种非捕获分组,它根据某个模式之前或之后中的内容匹配其他模式。环视也称为零宽度断言。

8.1 正前瞻

输入图片说明

8.2 反前瞻

输入图片说明

8.3 正后顾

输入图片说明

8.4 反后顾

输入图片说明

8.5 本章所学

  • 如何使用正前瞻和反前瞻
  • 如何使用下后顾和反后顾

第9章 用HTML标记文档

9.1 匹配标签

匹配HTML或XML标签

<[_a-zA-Z][^>]*>grep -Eo '<[_a-zA-Z][^>]*>' lorem.dita

输入图片说明

9.2 用sed转换普通文本

插入html头

sed '1 i\\\\The Rime of the Ancyent Marinere(1798)\
\\\q' rime.txt

9.2 用sed进行替换

处理标题,加<h1>

sed '1s#^\(.*\)$#

\1

#;q' rime.txt

将前两步合为一步

sed -E '1s#^(.*)$#\\\The Rime of the Ancyent Marinere(1798)\
\\\

\1

\#;q' rime.txt

处理罗马数字,加<h2>

sed -En 's#^(ARGUMENT\.|I{0,3}V?I{0,2}\.)#

\1

#p' rime.txt

输入图片说明

处理特定段落,加<p>

sed -En '5s#^([A-Z].*)$#

\1

#p' rime.txt

处理多行诗文

sed -E '9s#^[ ]*(.*)#     

\1

#;10,832s#^([ ]{5,7}.*)#\1
#;833s#^(.*)#\1

#' rime.txt# 说明第9行 加

xxx

第10到832行 加xxx
第833行 加

9.3 追加标签

在诗文的结尾添加一些标签

sed '$ a\\\' rime.txt

使用sed命令文件

html.sed

#!/usr/bin/sed1s/^(.*)$/\\\ \1<\/title>\<\/head>\\

\1<\/h1>\/s/^(ARGUMENT|I{0,3}V?I{0,2})\.$/

\1<\/h2>/5s/^([A-Z].*)$/

\1<\/p>/9s/^[ ]*(.*)/

\1

/10,832s/^([ ]{5,7}.*)/\1
/833s/^(.*)/\1<\/p>/s/^$/
/$ a\<\/body>\<\/html>\

执行脚本

sed -E -f html.sed rime.txt > rime.html

9.4 用perl转换普通文本

9.5 本章所学

  • 如何在命令行中使用sed
  • 如何使用sed在前方添加(插入)、替换以及在尾部附加文本(及标签)
  • 如何使用Perl做同样的事情

第10章 初级班毕业了

Unix不会阻止用户干蠢事,因为那样也会妨碍用户做聪明的事。—Doug Gwyn

10.1 想上中级班

  • 《精通正则表达式(第3版)》电子工业出版社(2007)
  • 《正则表达式经典实例》东南大学出版社(2010)
  • 《正则表达式入门经典》清华大学出版社(2008)

10.2 工具、实现程序有及程序库

Perl:

不一定要学习Perl,但有必要在你的工具箱中保留Perl。

《Perl语言入门(第6版)》东南大学出版社(2012)

PCRE:

PCRE(Perl Compatible Regular ExpressionPerl,Perl兼容正则表达式),是一个用C语言编写的(8位和16位)的正则表达式库,参见

pcregrep是一个类似grep的8位工具程序,它可以让你在命令行中使用PCRE的特性。

Ruby(Oniguruma):

Oniguruma是Ruby1.9内置的正则表达式库。它是用C语言编写的,专门支持Ruby。可以用Rubular测试Ruby正则表达式,在线应用 ,支持1.8.7和1.9.2。TextMate就是用了Oniguruma库。

Python:

RE2:

RE2是个非回溯的C++正则表达式库 虽然RE2的速度很快,但是它不做回溯操作和后向引用。它是以Perl的CPAN包的形式来使用的,后向引用要依赖Perl的本地程序库完成。

10.3 匹配北美电话号码

^\(?(?:\d{3})\)?[-.]?(?:\d{3})[-.]?(?:\d{4})$

10.4 匹配电子邮件地址

^([\w-.!#$%&'*+-/=?^_`{|}~]+)@((?:\w+\.)+)(?:[a-zA-Z]{2,4})$# 说明一个正常的邮箱example@abc.com@前边允许的字符\w-.!#$%&'*+-/=?_`{|}~@后边((?:\w+\.)+)(?:[a-zA-Z]{2,4})

10.5 本章所学

  • 如何从文件中提取XML元素列表并将其转换为XSLT样式表
  • 从哪里在可以找到其他学习正则表达式的资源
  • 值得推荐的正则表达式工具、实现程序以及程序库
  • 更为可靠的匹配北美电话号码的模式

附录 正则表达式参考

QED中的正则表达式

元字符

字符简写式

空白符

Unicode空白字符

控制字符

字符属性

各种字符属性的脚本名称

POSIX字符组

选项与修饰符

正则表达式与ASCII码表

转载于:https://my.oschina.net/yysue/blog/1621437

你可能感兴趣的文章
OpenCms创建网站过程图解——献给OpenCms的初学者们
查看>>
C++ 异常处理机制的实现
查看>>
Freebsd的ports命令
查看>>
分布式系统---幂等性设计
查看>>
【转】时钟周期,机器周期,指令周期的区别
查看>>
MYSQL 更新时间自己主动同步与创建时间默认值共存问题
查看>>
android 屏幕适配
查看>>
Android Activity的4种启动模式
查看>>
leetcode第一刷_Minimum Depth of Binary Tree
查看>>
pm2-webshell —— 基于浏览器的终端控制台
查看>>
Mysql基准测试
查看>>
Session 撰改演示
查看>>
【转】python3 发邮件实例(包括:文本、html、图片、附件、SSL、群邮件)
查看>>
事务隔离级别(图文详解)
查看>>
canvas系列教程08-canvas各种坑
查看>>
浅析package.json中的devdependencies 和 dependencies
查看>>
又一个 iOS 侧边栏组件: SideMenu
查看>>
vue.js 打包遇到的问题
查看>>
【译】更优秀的GraphQL官方中文文档-客户端如何使用
查看>>
git pull遇到的问题
查看>>