2016-04-14 9 views
2

私はグラブしようとしています件名です。正規表現は単語間で検索しますが、検索語は返しません。

これは動作します。このような

preg_match_all('/Subject:(.*?)Date:/', $theEmail, $subjects); 

しかしリターン:

"Subject:This is my subject!Date:" 
私が欲しい

だけこれが私の主題であります!私が読んだことによると、それは私が得なければならないものです。私は何が欠けていますか?

+5

'$科目[マッチした文字列全体です1] [0] 'うまくいく – rock321987

答えて

2

あなたは

$theEmail = "Subject:This is my subject!Date:"; 
preg_match_all('/Subject:(.*?)Date:/', $theEmail, $subjects); 

print_r($subjects[1][0]); 
として値にアクセスするために subjects[1][0]を使用することができます

Ideone Demo

あなたがpreg_match_allを使用し、$subjectsは、すべての可能な一致を含む配列の配列であるが、最初の試合は、すなわち$subjects[0][0]かかわらず、常に任意のキャプチャグループの

+0

あなたの答えと私の違いを教えてもらえますか? 'echo'の代わりに' print_r'ですか? –

+0

@PedroLobito実際に私はコメントに答えを書いていました。だから、ここに答えるのに時間がかかりました。あなたは私にそれを打ちました。私は今、いくつかの説明を追加しました。 – rock321987

+0

フェア十分! ;) –

0

rock321987さんのコメント以外の解決方法は、look-aroundのようなアサーションを表示することです。

正規表現:(?<=Subject:)(.*?)(?=Date:)

PHPのコード:

<?php 
    $theEmail = "Subject:This is my subject!Date:"; 
    preg_match_all('/(?<=Subject:)(.*?)(?=Date:)/', $theEmail, $subjects); 
    print_r($subjects[0]); 
?> 

Regex101 Demo

Ideone Demo

0

すなわち、出力するだけのキャプチャグループ$subjects[1][0]をお試しください:

$theEmail = "Subject:This is my subject!Date:"; 
preg_match_all('/Subject:(.*?)Date:/', $theEmail, $subjects); 
$theSubject = $subjects[1][0]; 
echo $theSubject; 
//This is my subject! 

DEMO

http://ideone.com/ynyidy

関連する問題