0

私は初心者ですが、RegExr ツールを使用して機能することがわかった正規表現に問題があります。

ここに表示している properties.xml という XML ファイルから、分類された広告の一連のタイトルを読み込んでいます -

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <item>
      <title>For Sale - Toaster Oven</title>
    </item>
    <item>
      <title>For Sale - Sharp Scissors</title>
    </item>
<item>
      <title>For Sale - Book Ends</title>
    </item>
<item>
      <title>For Sale - Mouse Trap</title>
    </item>
<item>
      <title>For Sale - Water Dispenser</title>
    </item>
  </channel>
</rss>

XML を解析し、一致するかどうかをチェックする PHP コードを次に示します。残念ながら、何も表示されません。

<?php
$xml = simplexml_load_file("properties.xml");

foreach ($xml->channel->item as $item){
    $title = $item->title;
    $myregex = preg_quote("/(?<=For(.)Sale(.)-(.))[^]+/");
    $result = preg_match($myregex, $title, $trim_title);
    echo $result;
}
?>

RegExr ツールに対して正規表現を確認しましたが、問題ないようです。これがスクリーン キャップです。

ここに画像の説明を入力

4

3 に答える 3

1

の正規表現に誤りがあります[^]。キャレットは、角括弧内の一致する文字を否定するために使用されます。たとえば[^a]、a には一致しません。

あなたの正規表現は正直に言うと理想的ではありません。一致させたいのは、「販売中」の文字列の後に来るものだけです。

/販売中 - ([^<]+)/

于 2012-09-11T08:43:43.840 に答える
-1

あなたはこれを試すことができます

<?php
$xml = simplexml_load_file("properties.xml");

foreach ($xml->channel->item as $item){
    preg_match("/For Sale(.*)<\/title>/siU", $item);
    echo trim($item[1]," -");
}
?>
于 2012-09-12T05:32:26.343 に答える
-1

Xpath を使用して XML ファイルをクエリできます

$xml = simplexml_load_file("properties.xml");
$results = $xml->xpath('//title/text()');

static $myregex = '/For Sale - (.*)/';
while(list( , $title) = each($results)) {
    $result = preg_match($myregex, $title, $trim_title);
    $trim_title = $trim_title[1];
    echo $result; // Number of matches
    echo $trim_title;
}

もっと単純なのは

while(list( , $title) = each($results)) {
    echo substr($title, 11) . "\n";
}
于 2012-09-11T09:02:56.413 に答える