Как сопоставить символ новой строки \ n в регулярном выражении perl? - PullRequest
5 голосов
/ 21 декабря 2010

Я хочу сопоставить эту строку,

<center>'''<font color="blue"><font size="18.0pt">No Change Alarms Help &amp; Information</font></font>'''</center>

и заменить ее на

=<center>'''<font color="blue">No Change Alarms Help &amp; Information</font>'''</center>=

Теперь было бы просто, если бы теги всегда были цветом шрифта или центром, но ониможет быть абсолютно любым, и их может быть несколько.

Мой текущий код такой:

$html =~ s/<font size=".+">(.+)<\/font>/$1/g;

, но это, очевидно, не делает = на каждом конце.

Что я хотел бы сделать, это:

$html =~ s/\n(.+)<font size=".+">(.+)<\/font>(.+)\n/=$1$2$3=/g;

Однако он не соответствует символам новой строки, и я не могу понять, как заставить его соответствовать им, какие-либо подсказки?

(ЯЯ конвертирую html в разметку вики, однако конвертер заполняет размеры шрифтов, поэтому я вручную конвертирую их в заголовки в стиле вики.)

Ответы [ 3 ]

6 голосов
/ 21 декабря 2010

Все, что мне было нужно, это /gm в конце моего запроса, оказывается, он игнорирует новые строки по умолчанию.

1 голос
/ 05 сентября 2017
$string_given =~ s/matching expression/sustitution/s;

Я думаю, что это будет работать, используя модификатор / s, который мнемонически означает «обрабатывать строку как одну строку». Это меняет поведение "." чтобы соответствовать символам новой строки.

Чтобы соответствовать началу этого комментария до конца, мы добавляем модификатор / s следующим образом:

$str =~ s/<!-- Start.*End of section -->//s;

Без / с он не будет совпадать вообще.

0 голосов
/ 25 января 2019

В некоторых случаях это может не сработать из-за того, как perl «обесценивает» ввод. Передача -0777 в качестве параметра заставит его учитывать несколько строк. (Передайте его вместе с другими параметрами, например, perl -0777pi -e)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...