0

フォーム提供の UTC 時間とフォーム提供のイベント名文字列を、ファイルから読み取った配列と一致させようとしています。問題は、一致しない場合でも常に一致しているように見えることです。ファイルの形式は常に一定であるため、二重引用符で囲まれた値を探すことになることはわかっているので、strpos() で結果を取得できなかった後、preg_match を試しました...そしてすべてに一致するようになりました。以下のコードと出力例 ($utc と $event_name) は、ここに到達した時点で既に設定されており、正しいものです):

$match1 = "/\"{$utc}\"/";
       $match2 = "/\"{$event_name}\"/";
       print "Match Values: $match1, $match2<p>";

foreach($line_array as $key => $value) {
   print "Value = $value<p>";

   if ((preg_match($match1,$value) == 1) and (preg_match($match2,$value) == 1))
   {
       print "Case 1 - False<p>";
   } else {
      print "Contains targets: $value<p>";
      //code to act on hit will go here
   }
}

そして、ここに戻ってくるものがあります:

Match Values: /"1371033000000"/, /"Another test - MkII "/

Value = { "date": "1357999200000", "type": "meeting", "title": "Plant and Animal Genome     Conference, San Diego, CA", "description": "NCGAS to present at Plant and Animal Genome   Conference, San Diego, CA", "url": "http://www.event1.com/" }

Contains targets: { "date": "1357999200000", "type": "meeting", "title": "Plant and Animal Genome Conference, San Diego, CA", "description": "NCGAS to present at Plant and  Animal Genome Conference, San Diego, CA", "url": "http://www.event1.com/" }

Value = { "date": "1357693200000", "type": "meeting", "title": "Testing Addition",  "description": "This is a fake event.", "url": "http://pti.iu.edu" }

Contains targets: { "date": "1357693200000", "type": "meeting", "title": "Testing Addition", "description": "This is a fake event.", "url": "http://pti.iu.edu" }

Value = { "date": "1371033000000", "type": "meeting", "title": "Another test - MkII", "description": "This is a fake event.", "url": "http://pti.iu.edu" }

Contains targets: { "date": "1371033000000", "type": "meeting", "title": "Another test - MkII", "description": "This is a fake event.", "url": "http://pti.iu.edu" }

私は最後のものだけを一致させるべきですが、それらはすべて一致します。私は正規表現で遊んでいますが、適切な魔法が見つからないようです。

4

2 に答える 2

1

Simplified it and got what I was after:

foreach($line_array as $key => $value) {
   print "Value = $value<p>";
   if (preg_match("/$utc/",$value) and preg_match("/$event_time/",$value))
   {
       print "Contains targets: $value<p>";
   } else {
       print "Case 1 - False<p>";
      //code to act on hit will go here
   }
}

But answer 2 got me in the right direction. Thanks, Ian!

于 2013-01-07T15:12:26.557 に答える
0

二重引用符で囲まれた文字列内で奇妙なことをする必要はありません。変数をそのままドロップするだけです...

$match1 = "/$utc/";
$match2 = "/$event_name/";

あなたの正規表現は長さゼロの文字列を探しているのではないかと思います。

また、この行にはそれほど多くの括弧は必要ありません...

if (preg_match($match1,$value) == 1 and preg_match($match2,$value) == 1) {
    [...]
}
于 2013-01-04T22:49:23.533 に答える