正则表达式似乎有效,但没有

时间:2014-05-27 12:22:15

标签: php regex

我想要一个功能来解析网站来源的数据:

function parse ($source) {
$res = array();
$matches = array();
$rx = "#^\s*routes\.push\(\{'start':([a-zA-Z0-9':,\-\s]*),\s'finish':([a-zA-Z0-9':,\-\s]*),\s'[a-zA-Z0-9':,\-\s]*':([0-9\s\-]){1,4},[a-zA-Z0-9':,\.\-\s]*}\);\s*$#";
preg_match_all($rx, $source, $matches);
    for($i=0,$_i=count($matches[1]);$i<$_i;++$i) {
    $res[$i][0]=$matches[1][$i];
    $res[$i][1]=$matches[2][$i];
    }

要解析的代码如下:

routes.push({'start': tokyo, 'finish': LA, 'blue': 18, 'arcoffset': -20, 'transpacific': true});
    routes.push({'start': tokyo, 'finish': seattle, 'blue': 6, 'arcoffset': 5, 'transpacific': true});
    routes.push({'start': tokyo, 'finish': sanjose, 'blue': 12, 'arcoffset': -4, 'transpacific': true});
    routes.push({'start': amsterdam, 'finish': tokyo, 'blue': 5, 'green': 2, 'arcoffset': 20});

问题是数组中没有任何内容。 当我通过这样做检查正则表达式时     echo preg_match_all($ rx,$ page,$ matches);

它返回0 因此我的正则表达式可能存在问题,但根据Regex Tester,它没关系:

Check regex: http://regexpal.com?...

2 个答案:

答案 0 :(得分:0)

您似乎想要匹配3件事:2个城市和1个号码。

$rx = "\{'start':([a-zA-Z]*),\s'finish':([a-zA-Z]*),\s'[a-zA-Z]*':\s([0-9\s\-]{1,4})";

答案 1 :(得分:0)

使用^ end $并说:整个字符串必须匹配此模式..所以甚至不重复..尝试删除它们,所以使你的模式像这样:

$rx = "/\s*routes\.push\(\{'start':([a-zA-Z0-9':,\-\s]*),\s'finish':([a-zA-Z0-9':,\-\s]*),\s'[a-zA-Z0-9':,\-\s]*':([0-9\s\-]){1,4},[a-zA-Z0-9':,\.\-\s]*}\);\s*/";