正则表达式的流派与元字符

不同的正则表达式工具,背后的引擎可能是不同的,相同的正则表达式可能在不同的工具中会获得不同的结果(不同的正则表达式也可能获得相同的结果),所以要注意这种语义的差异,如:

1
2
3
4
5
6
7
# perl regex pattern result
root@desktop-guo:~# echo -e 'july' | grep -z -P '(jul|july)'
july

# egrep result
root@desktop-guo:~# echo -e 'july' | grep -z -E '(jul|july)'
july

正则表达式的更有意义的操作:检查某个正表达式是否能够匹配某个字符串;查找和替换,字符串的更新

程序设计语言处理正则表达式的方式

  • 集成式 (integrated)

    正则表达式是内嵌在语言中的,属于语言的低级语法,如 Perl, 其他两种,不是内建的操作符来处理,由普通的函数接受普通的字符串,将他们作为正则表达式进行处理

  • 程序式 (procedural)

    函数式

  • 面向对象式 (object-oriented)

    通过构造函数及方法,如 Java 通过构造 Pattern、Matcher 对象来实现,当然也提供了函数式的静态方法来使用正则表达式

Unicode 中的行终结符

表示 Unicode code point 描述
LF U+000A ASCII 换行符
VT U+000B ASCII 垂直制表符
FF U+000C ASCII 进纸符
CR U+000D ASCII 回车
CR/LF U+000D U+000A ASCII 回车/换行
NEL U+0085 Unicode 换行
LS U+2028 Unicode 行分隔符
PS U+2029 Unicode 段分隔符

常见模式修饰符字母

字母 模式
i 不区分大小写的匹配模式
x 宽松排列和注释模式
s 点号通配模式(单行模式)
m 增强的行锚点模式(多行模式)