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 回答