0

WordPress プラグインを開発していますが、正規表現から正しい情報を取得する際に深刻な問題に遭遇しました。

正規表現のコードは次のとおりです。

preg_match_all("|grass1(.*)grass2|i", $split[1], $out);

出力は空の配列です。

$split[1] はメールの本文 (文字列) です。

私はgrass1とgrass2の間のすべての情報を抽出しようとしています. そのため、電子メールの本文 (文字列として) には、出力として何かが必要な "grass1 サムシング サムシング グラス 2" が存在します。ここに問題があり、文字列が件名、ヘッダー、または電子メール全体である場合に機能するため、奇妙です。だから私は何が起こっているのか混乱しています。問題を理解するための助けは役に立ちます。

メール本文のサンプル:

"_NextPart_000_0098_01CE2BC1.BFAF9200
 Content-Type: text/plain charset="us-ascii" Content-Transfer-Encoding: 7bit
 grass1 I'm testing the before or after function. If successful you should see all of           this message in a future email. grass2" 
4

1 に答える 1

1

草1と草2の間に改行「\ n」がある可能性があるため、「m」(複数行検索)修飾子が役立ちます。

preg_match_all("|grass1(.*)grass2|im", $split[1], $out);

修飾子の参照については、PHP マニュアルのreference.pcre.pattern.modifiers.phpを参照してください。

たとえば、"s" ("." は "\n" にも一致します) は代わりになる場合があります。

preg_match_all("|grass1(.*)grass2|is", $split[1], $out);

追加 明確にするために: "m" と "s" は似ていますが、同じではありません:

  • 「s」は「.」(ドット)を改行にも一致させるため、「.*」は複数行のテキストに一致します
  • 「m」はパターンを複数行のテキストに適用するため、「a\nb」は a で終わり b で始まる行に一致します。つまり、検索パターンとして「\n」を使用できます
于 2013-04-01T18:05:00.673 に答える