2012-12-13 56 views
1

我只想問一下這個符號。*?意味着在PHP中。 這裏是示例代碼:什麼此符號。*?意味着在PHP(HTML解析)

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"; 
    } 
} 

我維護一個網站,有功能從另一個提取表值/外部網站,然後分析它插在我們的數據庫..

我有改變$模式的價值,但我不能,因爲我不知道那有什麼符號的意思..

非常感謝你的幫助..

+0

HTTP有所幫助:// PHP達網絡/ regexp.reference.dot; http://php.net/regexp.reference.repetition - 你到目前爲止找到了什麼? – hakre

回答

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將匹配這個整個字符串。

參見例如: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

+0

/ims怎麼樣也是一個rgular表達式?謝謝。 – Vainglory07

+0

@ Vainglory07更新了答案,您可以閱讀鏈接 – DhruvPathak