Многострочное регулярное выражение с модулем Erlang re - PullRequest
2 голосов
/ 10 ноября 2009

Не удалось заставить Эрланга повторно работать для мультилинии, пожалуйста, помогите!

> 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 ]

7 голосов
/ 10 ноября 2009

Опция multiline только указывает механизму регулярных выражений обрабатывать ^ не только как начало строки, но также и как начало новой строки, а также указывает, что движок обрабатывает $ не только конец строки, но как конец строки.

Попробуйте вместо этого:

re:run("hello,\nworld", "o,.*w", [dotall]) 

Опция dotall сообщит механизму регулярных выражений также, что метасимвол DOT должен соответствовать разрывам строк.

2 голосов
/ 10 ноября 2009

используйте опцию dotall, т.е.

> re:run("hello,\nworld", "o,.*w", [dotall]).
{match,[{4,4}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...