Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式-PHP_Php_Regex_Preg Match_Preg Match All - Fatal编程技术网

正则表达式-PHP

正则表达式-PHP,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我正在使用下面的PHP代码 <? $data = file_get_contents('http://www.kitco.com/texten/texten.html'); preg_match_all('/([A-Z]{3,5}\s+[0-9]{1,2},[0-9]{4}\s+([0-9.NA]{2,10}\s+){1,7})/si',$data,$result); $records = array(); foreach($result[1] as $d

我正在使用下面的PHP代码

<?
    $data = file_get_contents('http://www.kitco.com/texten/texten.html');
    preg_match_all('/([A-Z]{3,5}\s+[0-9]{1,2},[0-9]{4}\s+([0-9.NA]{2,10}\s+){1,7})/si',$data,$result);

    $records = array();
    foreach($result[1] as $date) {
        $temp = preg_split('/\s+/',$date);
        $index = array_shift($temp);
        $index.= array_shift($temp);
        $records[$index] = implode(',',$temp);
    }
    print_R($records);
?>
我想做的是阅读下表中的黄金(买入和卖出)价格,有人能帮我修改正则表达式吗

纽约现货价格 市场关闭了 将在

----------------------------------------------------------------------
   Metals          Bid        Ask           Change        Low       High 
   ----------------------------------------------------------------------
   Gold         1411.20     1412.20    +22.90  +1.65%    1390.10  1418.00 
   Silver         22.74       22.84     +0.48  +2.13%      22.26    23.08 
   Platinum     1495.00     1501.00    +41.00  +2.82%    1470.00  1511.00 
   Palladium     756.00      761.00     +7.00  +0.93%     750.00   766.00 
   ----------------------------------------------------------------------
   Last Update on Jun 03, 2013 at 17:14.58
   ----------------------------------------------------------------------

我不确定您是否可以修改现有的正则表达式以轻松匹配这两个表,但如果您有字符串中的第二个表,则可以使用:

$string = "PLAIN TEXT TABLE DATA HERE";

preg_match('/Gold\s+(\d+\.\d{2})\s+(\d+\.\d{2})/',$string,$matches);

$goldBid = $matches[1];
$goldAsk = $matches[2];

这里我只匹配数字和句点字符。此代码应返回您要查找的号码。它使用示例中的数据字符串

<?
preg_match_all('!Gold\s+([0-9.]+)\s+([0-9.]+)!i',$data,$matches);

//New York
$ny_bid = $matches[1][0];
$ny_ask = $matches[2][0];
print("NY\nbid: $ny_bid\n");
print("ask: $ny_ask\n\n");

//Asia
$asia_bid = $matches[1][1];
$asia_ask = $matches[2][1];
print("Asia\nbid: $asia_bid\n");
print("ask: $asia_ask\n");
?>
你也可以使用


如果你能想出第一个表达式,那么第二个表达式应该不会带来任何问题。表数据是纯文本还是HTML?这将与构造正则表达式有所不同。我试图更改代码,但它没有显示任何记录它的空白?请在OP处检查,它可能使用了原始的
$variable
名称,而不是
$string
。我在我的服务器上进行了测试,这个方法也可以。OP:你是想用HTML读取数据还是纯文本?
<?
preg_match_all('!Gold\s+([0-9.]+)\s+([0-9.]+)!i',$data,$matches);

//New York
$ny_bid = $matches[1][0];
$ny_ask = $matches[2][0];
print("NY\nbid: $ny_bid\n");
print("ask: $ny_ask\n\n");

//Asia
$asia_bid = $matches[1][1];
$asia_ask = $matches[2][1];
print("Asia\nbid: $asia_bid\n");
print("ask: $asia_ask\n");
?>
NY
bid: 1411.20
ask: 1412.20

Asia
bid: 1406.80
ask: 1407.80
<?php
pattern('Gold\s+([0-9.]+)\s+([0-9.]+)', 'i')->match($data)->forEach(function ($m) {
    print 'bid: ' . $m->group(1);
    print 'ask: ' . $m->group(2);
});