2009-06-02 8 views
1

すべてのものをPHPの正規表現で照合するにはどうすればよいですか?私は試してみた:/[.rrnnnnnnnnnnn *何か案は?ありがとう。すべてのものをPHPの正規表現とどのように一致させることができますか?

public function getHeader($headerName) { 
    preg_match('/[\r\n]' . $headerName . '[:][ ](.+)[\r\n][^ \t]/Uis', "\n" . ltrim($this->originalMessage), $matches); return preg_replace('/[\r\n]*/', '', $matches[1]); 
    } 
+4

実際に*すべて*一致するようにしたい場合は、まったく一致する必要がないので、少し明確にする必要があります。ソース自体で何をする必要があれば何でもしてください。 –

+2

汚れチェックを回避するためにすべてを照合するだけではないことを願っています。 –

答えて

0

どう/.*/sについて:

これは私が電子メールを解析するPHPクラスのために作られたメソッドのためにあるのですか?

文字クラス([])では、。単に期間を意味します。

+0

これは新しい行と一致しません。 –

+0

はい、それは新しい行にマッチしています:perl -e 'print "は\ n" =〜m/\ A。* \ z/s'と一致します。 –

9

/.*/sperl's docs参照)。 sオプションの意味(そのURLからの引用):

文字列を1行として扱います。 (ください。改行にマッチ)

6

私はあなたがまたがる複数の行と一致することを、\n及び上記\rのあなた含めることに基づいて、想定しています。この場合には、使用:

/.*/s

(。いかなる文字、それが正常に一致しない改行でさえも、一致する.を変更する、つまり、明示的な/s修飾子に注意してください)

参照してください。 http://www.perl.com/doc/manual/html/pod/perlre.html

+0

これは、ありがとう –

0

/[\.\r\n]+/は何ですか?あなたは、任意のテキストに含ままたは複数のキャプチャの間に介在してパターンをキャプチャしたい場合には便利です

my $abstract_text = /Abstract:([\s\S]+?)\nReferences/m; 

この場しのぎも前に私のために働いています。

2

なぜすべてにマッチしますか?それは常に真実だから条件として使うことには意味がありません。テキストをキャプチャする場合は、文字列全体を使用するだけなので正規表現は必要ありません。あなたが汚れチェックをするのを試みているなら、あなたを恥ずかしく思う(そして、そうすることについて別の質問をする)。

ここにはXY Problemのビットがあります。いくつかのタスクXを念頭に置いて、Yが解の一部であると考えてください。あなたはYについて質問しますが、私たちにXを教えてはいけません。あなたがしようとしていることがわからないときは、本当の質問に答えるのは難しいです。 :)

+0

質問を更新してコメントに隠さないでください:) –

+0

本当の質問のように聞こえます。「PHPで電子メールヘッダを取り出すにはどうすればいいですか?」確かに既にそれを行うPHPクラスがあります。 –

関連する問題