我正在抓取网页的一部分,然后将结果插入到mySQL中。
问题区域的源代码是:
<span class="profilelastlogin">
31,
Kiev, Ukraine
</span>
我想选择3个项目,年龄,城市,国家,然后将它们分配给单个变量。
我正在使用此正则表达式选择完整字符串,但它不起作用。我很感激任何指导。
$regexAgeCityCountry = '/<span class="profilelastlogin">(.*?)<\/span>/';
preg_match_all($regexAgeCityCountry, $page, $outputAgeCityCountry);
答案 0 :(得分:1)
您可以使用s(PCRE_DOTALL)修饰符将代码视为一行,因此&#39;。&#39;将匹配换行符。
Here是php参考:
如果设置了此修改器,则模式中的点元字符匹配 所有字符,包括换行符。没有它,排除了换行符。 此修饰符等效于Perl&#s; s修饰符。负面的一类 例如[^ a]始终匹配换行符,独立于换行符 设置此修饰符。
Here是一个带有修复
的工作示例答案 1 :(得分:0)
为什么不匹配3个独立的小组?
/<span class="profilelastlogin">(.*?),(.*?),(.*?)<\/span>/s
第1组包含年龄,第2组包含城市,第3组包含国家。
您也可以使用此正则表达式来确保年龄始终为数字:
/<span class="profilelastlogin">([0-9]*),(.*?),(.*?)<\/span>/s
答案 2 :(得分:0)
首先将所有数据放在1个变量中,而不是
$arr = explode(',',$yourvariable);
$city = $arr[0];
$state = $arr[1];
$country = $arr[2];
答案 3 :(得分:0)
<span class="profilelastlogin">\s+\K|\G(?!^)([^,]+),?\s*(?=[\s\S]*<\/span>)
你可以尝试这个来捕获3个部分。参见演示。
https://www.regex101.com/r/rK5lU1/28
$re = "/<span class=\"profilelastlogin\">\\s+\\K|\\G(?!^)([^,]+),?\\s*(?=[\\s\\S]*<\\/span>)/mi";
$str = "<span class=\"profilelastlogin\">\n 31,\n Kiev, Ukraine\n </span>";
preg_match_all($re, $str, $matches);