Czy istnieje wyrażenie pasujące do „wszystkich znaków, w tym nowych linii”?
Na przykład w poniższym wyrażeniu regularnym nie ma danych wyjściowych, $2
ponieważ (.+?)
nie zawiera nowych wierszy podczas dopasowywania.
$string = "START Curabitur mollis, dolor ut rutrum consequat, arcu nisl ultrices diam, adipiscing aliquam ipsum metus id velit. Aenean vestibulum gravida felis, quis bibendum nisl euismod ut.
Nunc at orci sed quam pharetra congue. Nulla a justo vitae diam eleifend dictum. Maecenas egestas ipsum elementum dui sollicitudin tempus. Donec bibendum cursus nisi, vitae convallis ante ornare a. Curabitur libero lorem, semper sit amet cursus at, cursus id purus. Cras varius metus eu diam vulputate vel elementum mauris tempor.
Morbi tristique interdum libero, eu pulvinar elit fringilla vel. Curabitur fringilla bibendum urna, ullamcorper placerat quam fermentum id. Nunc aliquam, nunc sit amet bibendum lacinia, magna massa auctor enim, nec dictum sapien eros in arcu.
Pellentesque viverra ullamcorper lectus, a facilisis ipsum tempus et. Nulla mi enim, interdum at imperdiet eget, bibendum nec END";
$string =~ /(START)(.+?)(END)/;
print $2;
Odpowiedzi:
Dodaj
s
modyfikator do wyrażenia regularnego,.
aby dopasować znaki nowej linii:źródło
"(?s)yourPattern.*"
- zobacz także: rexegg.com/regex-modifiers.html#dotallm
nie jests
. Zobacz: rubular.comJeśli nie chcesz dodawać
/s
modyfikatora wyrażenia regularnego (być może nadal chcesz.
zachować jego oryginalne znaczenie w innym miejscu wyrażenia regularnego), możesz również użyć klasy znaków. Jedna możliwość:postać, która nie jest spacją lub jest spacją. Innymi słowy, każda postać.
Możesz także zmienić modyfikatory lokalnie w niewielkiej części wyrażenia regularnego, na przykład:
źródło
(?s:.)
składnię.(?:.|\n)
pod jakimkolwiek względem jest gorszy, poza tym, że jest mniej elegancki?([\S\s]+)
tego szukałem. Dzięki. +1*
lub+
ponieważ istnieją 2 ^ n różne sposoby, aby dopasować dowolny podany ciąg długości n.Tak, po prostu musisz
.
dopasować nowy wiersz:źródło
Chcesz użyć „multilinii”.
źródło
m
wpływa na^
i$
zakotwiczenia, ale nie.
.