Neben dem RegexOptions Compiler-Flags, gibt es keine direkte Entsprechung für den /s
Stil Modifikator, aber Sie können, indem Sie einen Inline-Modifikator gleich am Anfang Ihrer regex den gleichen Effekt:
"(?s)A(.*?)B"
Be Beachten Sie, dass es zwei Formen des Inline-Modifikators gibt. Der in Ihrem Beispiel verwendete:
"A(?s)(.*?)(?-s)B"
... hat keinen Doppelpunkt. Der (?s)
ist lediglich ein Schalter, der den DOTALL-Modus einschaltet, bis der ihn wieder ausschaltet. Die andere Version, mit dem Doppelpunkt, ist eigentlich eine nicht einfangende Gruppe, (?:...)
, mit dem eingebauten Modus-Schalter. Der Modus-Schalter hat nur Wirkung, während der Teil des Regex innerhalb dieser Gruppe die Kontrolle hat. Mit dieser Version würde Ihr Beispiel
"A(?s:.*?)B"
werden ... oder, wenn Sie noch eine Erfassungsgruppe verwenden wollte:
"A(?s:(.*?))B"
Sie wollen nicht mischen die beiden Versionen. Wenn Sie sind Ihre ursprünglichen Regex wie folgt schreiben:
"A(?s:)(.*?)(?-s:)B"
... wäre es nicht eine Ausnahme auslösen, aber es wäre nicht wie vorgesehen. Die (?s:)
würde im DOTALL-Modus einfach nichts entsprechen, und die (?-s:)
würde im Nicht-DOTALL-Modus mit etwas mehr nichts übereinstimmen.
Ich mag mehr regexbuddy :) – knoopx
Ja, tue ich auch, aber Regexbuddy unterstützt dann alle Regex Aromen und Funktionen. – Cerebrus