正则表达式
综述
由于perl是正则表达式的鼻祖,使用perl语法最为合适。 正则表达式一般用在“三剑客”(grep, sed, awk)和vim中。 要注意的是sed和vim都是行编辑模式。
使用
比如批量重命名文件夹就会用到。
for i in *; do echo "$i" |perl -pe 's/(\[.+?\]) *(.+)/\2 \1/'; done
greedy 和 lazy 匹配
在* +后添加?
转义字符
. ? + * [] {} /
基本字符类
\d 数字字符 \D 非数字字符
\w [a-zA-Z0-9_] \W [^a-zA-Z0-9_]
\s 空白字符 \S
POSIX字符类
- [:alnum:] [a-zA-Z0-9]
- [:alpha:] [a-zA-Z]
- [:xdigit:] [a-fA-F0-9]
边界匹配
- \b 单词边界 \B
环视(lookaround)
设置需要匹配不需要获取的部分。 因为lookahead比lookbehind实现更简单,所以lookbehind一般有字符数字的限制,lookahead则没有。
向前查看(lookahead)
- 肯定式 .+(?=:)
- 否定式 .+(?!:)
向后查看(lookbehind)
- 肯定式 (?<=$)[0-9.]+
- 否定式 (?<!$)[0-9.]+
嵌入式条件
(/()?\d{3}(?(1))|-)\d{3}-\d{4}
123-456-7890
(123)456-7890
常用正则表达式
邮政编码
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
URL
https?:\/\/[-\w.]+(:\d+)?(\/([\w\/_.]*)?)?
(\w+\.)*\w+@(\w+\.)+[A-Za-z]+