我只想问这个符号是什么。*?在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的值,但我不能,因为我不知道这些符号是什么意思..
非常感谢您的帮助..
答案 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字符串。
并且/.*?/s
表示“匹配任何字符0次或更多次,但非贪婪匹配,即返回最早的匹配(此处:零长度字符串)。
/hello.*?world/s
仅匹配hello , now this is some garbage , world
,因为它是最小的非贪婪匹配。
参见相同的例子: http://regexr.com?334ep
ims
是标记i
,m
和s
您可以在此处阅读相关内容:PHP: Possible modifiers in regex patternsDocs
答案 2 :(得分:1)