正则表达式总结及一些有用的例子

背景

  正则表达式的用处十分广泛:字符串处理、输入验证等,特别是在爬取网页中对网页内容的清洗更需要正则。

正则表达式

  基本所有的语言都支持正则表达式,或者内置或者引入。正则的语法很多,但每种语言对正则支持的程度都不同(常用的语法规则基本都支持),这点需要格外注意。

      元字符

  正则表达式有12个特殊的标点,也称为元字符。它们包括:$ ( ) * + . ? [ ^ { |。

    正则表达式中照字面匹配这些元字符,需要在它们的前面加入一个反斜杠来进行转义。

  注意:元字符不包括右方括号 ]、连字号 -、右花括号 }。前两个字符只有在没有转义的 [ 之后才是元字符,} 只有在没有转义的 { 之后才是元字符。不要碰到一个标点字符就进行转义,尽管不会影响正则表达式的正确性。

      一些栗子 

1.区分大小写:(?i)[A-F0-9] 可以匹配大小写A-F
2.单行和多行模式:(?s)单行模式,点号匹配换行符;(?m)多行模式
3.整个单词的边界:匹配 my cat is brown中的cat,不匹配category中的cat cat;反过来的话是 catB
4.由三个字符<(?:>开始的是一个非捕获分组,右括号<)>标记该分组的结束。非捕获分组不会破坏捕获分组的编号;另外,它性能较高;在非捕获分组中还可以使用模式修饰符
肯定型环视。My <b>cat</b> if furry.找到HTML粗体标记的文本,但不要标记:(?i)(?<=<b>)w+(?=</b>)。
肯定型逆序环视是唯一可以从右向左遍历目标文本的正则结构,其语法是(?<=text),text在不同的正则流派中不一样,但总是可以放入字面文本。 
肯定型顺序环视的语法是(?=regex),regex表示你可以放入任何正则内容。
否定型环视。把肯定型环视中的=换成!,就构成了否定型环视

 注意:逆序环视中的text在不同的正则流派中支持是不同的。Perl、Python、Ruby 1.9允许使用多选结构和字符类来把多个不同固定长度的字面字符串放入环视中。PCRE、Java允许在逆序环视中使用任意有限长度的正则表达式,即无限量词 * + {n,} 不能使用。 .NET允许在环视中使用任何正则表达式。逆序环视用起来方便,但其速度很一般

 通过“宽松排列模式”向正则表达式中添加注释,Java通过Pattern.COMMENTS或在正则表达式前面增加(?x)打开。注释以 # 开头

查找XML格式的标签:
速成方案:<[^>]*>
在属性值中允许出现 > : <(?:[^>'"]|"[^"]*"|'[^']*')*>
(X)HTML标签(灵活方案):</?([A-Za-z][^s>/]*)(?:[^>'"]|"[^"]*"|'[^']*')*>
(X)HTML标签(严格方案):(?i)<(?:([A-Z][-:A-Z0-9]*)(?:s+[A-Z][-:A-Z0-9]*(?:s*=s*(?:"[^"]*"|'[^']*'|[-.:w]+))?)*s*/?|/([A-Z][-:A-Z0-9]*)s*)>

  

原文地址:https://www.cnblogs.com/51zone/p/8012082.html