综述


由于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\/_.]*)?)?

email

(\w+\.)*\w+@(\w+\.)+[A-Za-z]+