这个符号是什么。*?用PHP表示(HTML解析)

时间:2012-12-13 06:36:20

标签: php html html-parsing screen-scraping symbols

我只想问这个符号是什么。*?在PHP中意味着 这是示例代码:

    function parse($html) {
    //echo "Find table(id=weekdays)..\n";
    $pattern = "/(<table.*?id=\"weekdays\".*)/ims";
    //$pattern = "/(<div.*?id=\"flexBox_flex_calendar_mainCal\".*)/ims";
    //echo $pattern."\n";
    $match = array();
    //$html = str_replace("\r", "", $html);
    //$html = str_replace("\n", "", $html);
    if (preg_match($pattern, $html, $match) > 0) {
        //print_r($match);
        //echo $match[1];
        //echo count($match);
        $this->parseTable($match[1]);
    } else {
        echo "Error: no match calendar data(table id=weekdays) found, maybe fx.com change its site html'!\n";
    }
}

我正在维护一个网站,该网站具有从另一个/外部网站提取表值然后解析它以插入我们的数据库的功能..

我必须更改$ pattern的值,但我不能,因为我不知道这些符号是什么意思..

非常感谢您的帮助..

3 个答案:

答案 0 :(得分:4)

这称为正则表达式,您可以在此处了解更多信息:http://www.regular-expressions.info/

/.*?/ims表示“匹配任何字符,如果有的话(非贪婪)”。

答案 1 :(得分:3)

这是正则表达式中的通配符。

(<table.*?id=\"weekdays\".*)

/./s表示任何字符

*表示0次或更多次

所以/.*/s表示“匹配任何字符0次或更多次”

STRING:hello , now this is some garbage , world. And this is a long sentence which ends in world

hello.*world将匹配此WHOLE字符串。

参见示例:http://regexr.com?334em

并且/.*?/s表示“匹配任何字符0次或更多次,但非贪婪匹配,即返回最早的匹配(此处:零长度字符串)。

/hello.*?world/s仅匹配hello , now this is some garbage , world,因为它是最小的非贪婪匹配。

参见相同的例子: http://regexr.com?334ep

ims是标记ims

您可以在此处阅读相关内容:PHP: Possible modifiers in regex patternsDocs

答案 2 :(得分:1)