2012-02-27 19 views
0

パターンマッチングのまわりで私の頭をラップしようとしているの時間後、私はタオルを投げることだし、専門家に回す...正規表現パターンのヘルプ(PHP)

私は私がしようとしているログファイルを持っていますから文字列を抽出する。

形式は以下のようである:

12:00 SomeText: 
1:20 MoreText: 

"SomeText/moreTextのは、" 私が取得するために必要なものです。私は以下のコードを作ってみたが、結果の近くには何も得ていない私は期待してい:

$string = "12:00 SomeText: blah, blah, blah not important"; 
$regex = '/[0-9]:[0-9] (.*?)\: /'; 
$entity = preg_split($regex, $string); 

私はそれが理解して正規表現ロジック、任意の数字が続くコロン、任意の数、、、空白が続き、テキストは、空白

右方向へのプッシュをいただければ幸いに続いて、コロンも続きます!

おかげ クリス

+0

あなたが受けているフォーマットを拡張していただけますか?デリミタは何ですか?スペース、タブ...? – m0skit0

答えて

3

あなたは、単一の数字、コロン、1桁の数字と一致しています。

$string = "12:00 SomeText: blah, blah, blah not important"; 
$regex = '/[0-9]+:[0-9]+ ([^:]+)/'; 
$entity = array(); 
preg_match($regex, $string, $entity); 

これは、1つ以上の数字、コロン、1つ以上の数字、残りの数字と一致します。 preg_matchは議論の後の位置0で、全体のマッチング式(12時00いくつかのテキストを)入れて、マッチした部分式(テキスト)その後、ので、あなたの「いくつかのテキストは、」$entity[1]

になります[編集] ますコメントでは、ヘッダーとの一致を改善しました。前に、あなたは、必要に応じて、文字列の末尾までの任意の文字を、見つける

(.*?)\: 

を持っていたし、それはコロンが見つかるまでバックトラック。私は

([^:]+) 

と置き換えました。これは、コロンではない1つ以上の文字を見つけ、それらに一致します。これは、「何とか、何とか、何とか...」を見ていると、それだけで見つけたものを無視から正規表現を節約できます。

+1

私にそれを打つ。私はなぜ2番目のコロンがエスケープされているのかわかりませんが。 –

+0

私は、ヘッダーだけを必要としていたので、彼はそれを持っていると思った。時間とコロンの間の部分がヘッダー区切りとして働いていた。あなたはそれを明確にすることができた場合@クリススプラーグは、私は正規表現をもう少し効率的に行うことができます。 –

+0

は確かに、私は単なる文字列の「SomeText」の部分をつかむしようとしています。 –