使用正则表达式在PHP中匹配字符串

时间:2012-09-11 08:31:14

标签: php regex

我是初学者,我遇到了一个正常表达式问题,我发现它使用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工具检查了正则表达式,看起来很好 - 这是一个screencap

enter image description here

3 个答案:

答案 0 :(得分:1)

您的正则表达式中的[^]出错。插入符号用于否定方括号中的匹配字符。例如,[^a]与a。

不匹配

说实话你的正则表达并不理想。如果您想要匹配的是“For Sale”字符串之后的任何内容,我只需使用

  

/出售 - ([^&lt;] +)/

答案 1 :(得分:-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";
}

答案 2 :(得分:-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]," -");
}
?>