正则表达式
本人认为, 如果你在五分钟之前才知道什么是正则表达式, 那么在接下来的几分钟内, 你也无法应用它解决你的问题.
匹配优先量词: 尽可能尝试更多匹配
? 匹配一个或不匹配
+ 匹配至少一个
* 匹配任意多个或不匹配
{min, max} 匹配 min ~ max 次
忽略优先量词: 尽可能尝试更少匹配, 一旦匹配可以成功, 立即结束匹配
?? 不匹配或者匹配一个
+? 匹配至少一个
*? 不匹配或者匹配任意多个
{min, max} 匹配 min ~ max 次
占有优先量词: 尽可能尝试更多匹配, 一旦匹配, 就不能回退. 也就是不保存备用状态. 其行为类似于匹配优先和固化分组的结合.
?+ 匹配一个或不匹配
++ 匹配至少一个
*+ 匹配任意多个或不匹配
{min, max}+ 匹配 min ~ max 次
(My Note: 深入理解贪婪量词和惰性量词, 请参阅<精通正则表达式>中文第三版 p.160 ~ 161)
( ... ) 捕获分隔
(: ... ) 非捕获分隔
(:<name>) 命名捕获, 在 Perl 5.xxx 中不受支持
(?<= ... ) 肯定逆序环视
(?= ... ) 肯定顺序环视
(?<! ... ) 否定逆序环视
(?! ... ) 否定顺序环视
(?> ... ) 固化分组
(?modifier) 模式修饰符开始
(?-modifier) 模式修饰符结束
(?(condition)true|false) 条件判断: 可以匹配则返回 true 部分, 否则返回 false 部分
(?# ... ) 注释
常用的元字符: (引用: http://deerchao.net/tutorials/regex/regex.htm)
代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束
代码/语法 说明 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
选项:
/i 忽视大小写
/x 松散结构模式
/s .(点号) 可以匹配 \n
/m ^(托字符) 可以匹配 \n 之前的位置
$(美元符) 可以匹配 \n 之后的位置
/g 从上次匹配结束的地方开始迭代