私は次のような文字列を持っている:regex:エスケープされた二重引用符で囲まれた文字列をマッチングする方法は?
\"Some text inside here. And perhaps special chars including newlines...\" then more text (out here)
どのように私は単純に一致し、残りを廃棄し、中にエスケープされた二重引用符の間にあるものを返すのですか?
私は次のような文字列を持っている:regex:エスケープされた二重引用符で囲まれた文字列をマッチングする方法は?
\"Some text inside here. And perhaps special chars including newlines...\" then more text (out here)
どのように私は単純に一致し、残りを廃棄し、中にエスケープされた二重引用符の間にあるものを返すのですか?
私は2つだけ。これは、あまりにも正規表現せずに行うことができます
match = s.match(/\\"(.*)\\"/m)
match[1] if match
文字列に二重引用符をエスケープがあると仮定しています:
$str = '\"Some text inside here. And perhaps special chars including newlines...\" then more text (out here)';
$out = explode('"', $str);
echo $out[0]; // outputs "\"
echo $out[1]; // outputs "Some text... ...\"
echo $out[2]; // outputs " then...here)"
はこれがするべきあなたのため正常に動作します:
b'\\".*?\\"'
このパターンは使用できません。
あなたがフラグ「S」「ドット」を作るこれを使用しない限り、「ドット」は改行文字と一致していないので、\".*\"
、さらにこのパターンを(改行文字を含む)すべてを一致させます
"this is a quoted text" and "this is another one"
上記のパターンは、引用符で囲まれた2つのテキストではなく、文字列全体と一致します。 (。*は欲張りで、できるだけ長い文字列(この場合は文字列全体)と一致するからです)。これはパターンを「気にしない」ものにし、できるだけ短い文字列に一致させる。あなたがフラグとともに、このパターンを使用することができ、それをラップする
「S」(ドット・全一致):
\".*?\"
またはこれを使用する:
必要としない\"[^"]\"
"s"フラグ。 ([^「]は、改行が含まれているものと一致したが、」以来。)
(私はPHPの文法に慣れていないよ、あなたはフラグを適用し、文字を自分でエスケープの世話をする必要があります。)
+1、それは良い説明と答え、2点:1.あなたがパターンでそれをエスケープする必要があるバックスラッシュと一致させる場合は、2.ネゲートされたcharクラスを使った例は、エスケープされていない引用符エスケープされたもの。代わりに '' \\ "。\" \\ "'のような 's'修飾子と一緒に遅延量子が使われます。 – stema
@Sahand:しかし、複数行一致モードを有効にする方が簡単です。 (他の答えを参照してください) – alexis
マルチラインフラグをオンにすると$と^がラインの開始と終了にマッチします。ドットマッチ改行を作成しません。 (私が言及したように、文法は言語間を守り、私はPHPに精通していないので、私は読者にエスケープなどを任せました) – Untitled
たとえ1組の引用符だけを仮定していても(なぜ?)、その間に改行があれば動作しません(OPが要求した場合)。 – stema
単に改行 '/ m'にマッチさせるだけです。答えを変更しました。 – iltempo
'm'は複数行のスイッチで、'^'は行の先頭に一致し、' $ 'は行末になります。 's'を意味すると仮定して改行文字にマッチします。 – stema