使用Erlang re模块的多行正则表达式

时间:2009-11-10 15:40:47

标签: regex erlang

无法让Erlang重新为多线工作,请帮忙!

> re:run("hello,\nworld", "o,.*w", [multiline]).
nomatch
> re:run("hello,\nworld", "o,.*w", [multiline, {newline, lf}]).
nomatch

> {ok, MP} = re:compile("o,.*w", [multiline]).
{ok,{re_pattern,0,0,
                <<69,82,67,80,55,0,0,0,2,0,0,0,7,0,0,0,0,0,0,0,111,0,
                  119,...>>}}
> re:run("hello,\nworld", MP).
nomatch

> re:run("hello,\nworld", ",\nw").
{match,[{5,3}]}

2 个答案:

答案 0 :(得分:7)

multiline选项只告诉正则表达式引擎将^不仅视为字符串的开头,而且还视为新行的开头,它还告诉引擎处理{{} 1}}不仅作为字符串的结尾,而且作为一行的结尾。

请改为尝试:

$

re:run("hello,\nworld", "o,.*w", [dotall]) 选项将告诉正则表达式引擎也允许换行符与DOT元字符匹配。

答案 1 :(得分:2)

使用dotall选项,即

> re:run("hello,\nworld", "o,.*w", [dotall]).
{match,[{4,4}]}