我是初学者,我遇到了一个正常表达式问题,我发现它使用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
答案 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]," -");
}
?>