re模块
1.compile
把一个正则表达式编译成一个正则匹配指令
compile(Regexp) -> {ok, MP} | {error, ErrSpec}
compile(Regexp,Options) -> {ok, MP} | {error, ErrSpec}
Regexp 可以是任意 Perl 风格的正则表达式, Options 选项参数
{ok, MP} = re:compile("[\x{4e00}-\x{9fa5}]+", [unicode]), %匹配中文
re:run("1234测试数据test", MP).
2.replace
根据正则表达式来替换数据
replace(Subject,RE,Replacement) -> iodata() | charlist()
replace(Subject,RE,Replacement,Options) -> iodata() | charlist() | binary() | list()
用一个替换值(Replacement)去替换正则表达式(RE)匹配到的数据,参数 Subject 是要匹配替换的数据,参数 RE 是替换的正则表达式,参数 Replacement 是要替换的值。
re:replace("Red Green Blue", "e+", "*").
3.run
根据正则表达式去匹配数据并返回匹配结果
run(Subject,RE) -> {match, Captured} | nomatch
run(Subject,RE,Options) -> {match, Captured} | match | nomatch
参数 RE 可以是正则字符串,也可以是用 re:compile 预编译过的正则匹配指令。
re:run("abc 1234 @#$", "\\d+").
4.split
用正则表达式去截取数据
split(Subject,RE) -> SplitList
split(Subject,RE,Options) -> SplitList
通过正则表达式(RE)来找到截取标记,然后把数据(Subject)截取。只返回被截取分开的数据,截取标记不会返回。
re:split("red - green - blue", "-", [{return, list}]).
5.常用Options
unicode::编码
{capture, all|first, binary|list}::分组
global::全局
multiline::多行
dotall::让换行符由点元字符匹配
ungreedy::非贪婪匹配
正则表达式
Atoms | [a-z][0-9a-zA-Z_]* |
---|---|
Variables | [A-Z_][0-9a-zA-Z_]* |
Floats | (\+|-)?[0-9]+\.[0-9]+((E|e)(\+|-)?[0-9]+)? |
正则表达式是以Erlang字符串来编写的。这意味着字符 \ 或 ” 必须以转码方式来书写。
例如浮点数的正则表达式就是:
(\\+|-)?[0-9]+\\.[0-9]+((E|e)(\\+|-)?[0-9]+)? 。
正则表达式并不是一定要有转义序列字符的,他们可以自动生成。除了用在不同的地方,否则与普通的Erlang字符串是一样的。
re:run(Data, "-define\\((?<name>\\w+),\\h*(?<id>\\d+)\\).\\h*%%+\\h*(?<note>[^\r\n]*)\\-(?<type>.*).*)", [{capture, all, binary}, global])