-1

さらに ".

$a='"xyz"kljhkljh"lkjhlkj"';
@b=$a=~ m/^"(.*)"$/m;

動作しないようですか?行末に \n はありません。

4

3 に答える 3

6

あなたが機能していない理由は、最初の引用符が文字列の先頭または改行の直後に発生し、最後の引用符が文字列の末尾または直前に発生するように制限しようとしているためです。その中のどこかに改行。

それはあなたのデータに含まれるものではありません。これを必要以上に難しくしないでください。

他のものも含め、最初の二重引用符と最後の二重引用符の間のすべてが必要な場合は、

($content)  = $string =~ /"(.*)"/sx;

それらがたくさん必要で、内部に二重引用符がない場合は、次のようにします。

(@contents) = $string =~ /"([^"]*)"/gx;
于 2013-03-09T00:22:46.193 に答える
1

tchristの回答に対する2番目のコメントで、最初と最後の引用符は文字列の最初と最後にあるべきだと言いますか?その場合は、正規表現もまったく必要ありません。文字列全体から最初と最後の文字を除いたものを使用してください。

    substr($a, 1, -1)
于 2013-03-09T01:13:09.483 に答える
0

何らかの理由でコメントを追加できないため、tchrist の回答に対する bootware のコメントに回答するための回答を作成しています。($content)=$string=~/"(.*)"/sxとの違い$content=$string=~/"(.*)"/sxは、前者はリスト コンテキストで一致し、後者はスカラー コンテキストで一致することです。スカラー コンテキストでは、結果は単純に 1 または 0 で、文字列が正規表現に一致したかどうかを示します。リスト コンテキストでは、正規表現の括弧で囲まれた各部分に一致する部分文字列のリストが、左から右の順に返されます。この場合、正規表現には 1 セットの括弧があったため、返されたリストには 1 つの要素 (引用符内にある文字列の部分) が含まれていました。

おまけ: $1、$2、... を使用して、括弧の各セットで一致する部分文字列を参照できます。

于 2013-03-09T01:05:52.417 に答える