《学习正则表达式》读书笔记二
来源:互联网 发布:淘宝企业店铺开通 编辑:程序博客网 时间:2024/04/27 16:06
第二章 简单的匹配模式
网址
http://regexr.com/
github 地址
https://github.com/michaeljamesfitzgerald/Introducing-Regular-Expressions
匹配的文本
THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.ARGUMENT.How a Ship having passed the Line was driven by Storms to the coldCountry towards the South Pole; and how from thence she made her courseto the tropical Latitude of the Great Pacific Ocean; and of the strangethings that befell; and in what manner the Ancyent Marinere came back tohis own Country.I.1 It is an ancyent Marinere,2 And he stoppeth one of three:3 "By thy long grey beard and thy glittering eye4 "Now wherefore stoppest me?
2.3 匹配非数字字符
- 通常可以将简写式取反,取 反的结果就是排除。比如, 要匹配非数字字符,可使用 包含以下大写字母D的简写 式:
\D
[^0-9] 或者 [^\d]
2.4 匹配单词和非单词字符
\w
- \D 和 \w的区别是 \D 会匹配空格,标点符号(引号,连字符,反斜杠,方括号)等字符,而\w却不会,他只匹配字母,数字和下划线。
在英语环境中,与\w 匹配相同内容的字符组为
[_a-zA-Z0-9]
\W 简写式匹配空格,标点以及其他非字母,非数字字符
\W
等同于
[^_a-zA-Z0-9]
试验
[^\W]
[^\w]
2.5 匹配空白字符
- 可以用以下简写式匹配空白 符:
\s
或者
[ \t\n\r]
- 空格
- 制表符(\t)
- 换行符(\n)
- 回车符(\r)
可以看到 http://regexr.com/ 中的空格和制表符会标亮,但是换行符和回车符不会
\S 或 [^ \t\n\r] 或 [^\s]
2.6 再谈匹配任意字符
匹配 ANCYENT
\bA.{5}T\b
这个表达式有更强的特指 性(请记住特指性,specificity,这个概念很重要),它 匹配单词ANCYENT。
- 简写式\b匹配单词边界,不消耗任何字符;
- 字符A和T限定了字符序列的 首尾字母;
- .{5}匹配任意五个字符;
- 简写式\b匹配单词的另一个 边界。
匹配7个字母的单词
\b\w{7}\b
试一下
.+ 和 [^\n] 或者 [^\n\r]
2.7.1 用sed为文本加标签
echo Hello | sed s/Hello/Goodbye/
- echo命令将在标准输出设备 中打印单词Hello,
- 竖线符(|)将打印内容 通过管道传到之后的sed 命令;
- 管道将echo的输出转为sed的输入;
- sed的s命令将单词 Hello变为Goodbye,而 Goodbye 就显示在屏幕上了。
克隆项目
git clone https://github.com/michaeljamesfitzgerald/Introducing-Regular-Expressions.git
在命令行中输入
sed -n 's/^/<h1>/;s/$/<\/ h1>/p;q' rime.txt
输出
<h1>THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.</ h1>
- 首先调用sed程序。
- sed默认的操作是直接复制 每行输入并输出,
- -n 选项覆盖了该默认 操作。 之所要覆盖默认 操作,是因为我们只想让正 则表达式影响第1行。
- 在行 的 开头(^)添加标签
- 命令p会 打印 受 影响 的 那 一行(第1行)。与- n 不同, 后者会打印所 有行。
- 最后 命令 q 会 结束 程序, 这样 sed 程序 就 只会 处理 第 1 行。
- 所有 的 操作 都是 针对 rime. txt 文件 执行 的。
2.7.2 用Perl为文本加标签
在命令行输入
perl -ne 'if ($.==1) { s/^/<h1>/; s/$/<\/h1>/m; print; }' rime.txt
输出
<h1>THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.</h1>
以下是这个Perl命令的执行过程解析。
- perl 调用 了 Perl 程序。
- -n 选项 输出 全部 输入 内容( rime. txt 文件)。
- -e 选项 允许 在 命令行( 而 不用 在 文件) 中 提交 程序 代码。
- if语句检查是否在 第一 行。 在 Perl 中$. 是个 特殊 的 变量它 匹配 当前 行。
- 第一个 替换 命令 s 先 找到 第一 行的 开头(^)然后 插入标签。
- 第二个 替换 命令 s 搜寻 行 结尾($)再插入标签。
- 替换 命令 最后 的 m( 多 行) 修饰 符, 表示 将 本行 单独 处理; 这样,$ 就 只 匹配 第一 行的 结尾 而 不会 匹配 整个 文本 的 结尾。
- 最后 在 标准 输出 设备( 屏幕) 中 打印 出 结果。
- 所有这些 操作 都是 针对 rime.txt 文件 的。
阅读全文
0 0
- 《学习正则表达式》读书笔记二
- 正则表达式学习-读书笔记
- 《学习正则表达式》读书笔记一
- 正则表达式学习二
- 精通正则表达式读书笔记(二)
- 正则表达式学习点滴(二)
- 正则表达式学习(二)
- 学习正则表达式(二)
- 正则表达式学习笔记(二)
- java正则表达式学习二
- 正则表达式学习(二)
- 正则表达式学习(二)
- 正则表达式的学习二
- 正则表达式 学习手册 二
- Java正则表达式学习(二)
- 正则表达式学习(二)之常见正则表达式汇总
- Python 正则表达式学习(二)正则表达式语法
- 正则表达式读书笔记
- Mybatis SQL映射文件讲解
- AI,一种与人类迥异的智能形态/智库2861
- JSnack使用心得(二)
- 使用ES6的新特性Proxy来实现一个数据绑定实例
- 公司各个部门所有英文缩写
- 《学习正则表达式》读书笔记二
- POJ 1275 Vijos 1108 小胖超市
- PHP之GD2使用
- SpringBoot Maven 打包可执行jar文件
- 函数创建方式及区别,粗略总结函数原理
- 在mac 机上配置jenkins iOS版本编译环境总结
- 买帽子(去重排序)
- hibernate入门二
- FZU1410 (map+sort)之 变位词