【问题标题】:using preg_match from XML feed使用来自 XML 提要的 preg_match
【发布时间】:2012-05-27 22:27:53
【问题描述】:

我正在尝试掌握 preg_match 的窍门,但我无法使用正则表达式选择我想要的内容。

我正在使用此处找到的 XML 提要http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

我想找到一种货币及其价值。它作为数组打印,所以我很困惑如何做到这一点。我需要以某种方式循环吗?即使我这样做了,我仍然没有弄清楚 preg_match 部分。

<?
$xml = simplexml_load_file('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml');
//print_r($xml);

preg_match('/ USD \= \(([0-9\.\,]+)\)$/',$xml,$match);

echo $match[1];
echo $match[2];

?>

任何帮助将不胜感激!

edit - 我试图让 PHP 网站上的示例使用我的链接工作,但我遇到了一堆错误。这就是我所拥有的

<?

$string = simplexml_load_file('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml');

$xml = new SimpleXMLElement($string);

$result = $xml->xpath('b/c');

while(list( , $node) = each($result)) {
   echo 'b/c: ',$node,"\n";
}
?>

【问题讨论】:

    标签: php xml preg-match


    【解决方案1】:

    你正在使用 SimpleXML 库,所以你可以使用xpath function

    更简单的解决方案是遵循 (this) 描述:

    $xml = simplexml_load_file('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml');
    
    foreach($xml->Cube->Cube->Cube as $rate){
      if ($rate["currency"] == 'WANTED CURRENCY') {
        echo $rate["rate"].' '.$rate["currency"].'<br/>';
      }
    }
    

    【讨论】:

    • 你介意看看我的更新。即使使用 PHP 网站上的代码,我似乎也无法让它工作
    • @user1406951 请看这里stackoverflow.com/questions/10281849/… - 第一个答案将解决您的问题:)
    • 太好了,这至少帮助了一些人将其输出,但我仍然希望能够只用一种货币进行 preg_match。
    • 谢谢,这比我想象的要容易得多。我倾向于把事情过度复杂化。我在想我必须 preg_match 它,但我忘了它只是被循环输出,所以它可以作为字符串匹配。
    【解决方案2】:

    如果你想使用正则表达式,你可以试试这个表达式吗?

    USD' rate='(.*)'
    

    我喜欢使用这个网站来帮助我表达: http://gskinner.com/RegExr/

    在这种情况下,我使用 file_get_contents 获取了 xml 的内容,将它们粘贴到此站点的框中,并开始使用页面顶部的栏制作表达式。在您键入时,您会自动在下面的框中查看是否有任何匹配项。

    【讨论】:

    • 我对您提供的链接有点困惑。我理解你所说的复制内容,但我不明白标志、捕获的分组等是什么意思。
    • 哦,粘贴 xml 后,单击顶部的白条(“匹配”下方),然后开始输入表达式。这真的是为了帮助您即时可视化它。例如,对于您的 xml,我输入了 USD' rate=' 并且我看到它有效。我使用 () 添加了一个捕获组,并用 '.这就是你所需要的。现在你走到底部并寻找'RegExp:'(它是列表中的第一个)你复制斜线之间的所有内容。这就是你对函数的表达。
    • 嗯,由于某种原因,它不能在 chrome 中工作。我在Firefox中打开它并开始工作。难怪我为什么这么困惑。
    • 这很奇怪。我在 chrome 上使用它。
    • 当您在匹配框中输入 USD' rate='(.*)' 时,USD [rate] => 1.2546 是否在主要区域突出显示?我准确地输入了您所拥有的内容,但没有突出显示它。当我输入 USD' 时,它会突出显示,但一旦我输入任何其他内容,它就会取消突出显示。
    猜你喜欢
    • 2012-01-10
    • 2013-01-16
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多