正则表达式在跨度内容之间进行选择,然后分离结果

时间:2015-02-16 10:32:23

标签: php regex

我正在抓取网页的一部分,然后将结果插入到mySQL中。

问题区域的源代码是:

<span class="profilelastlogin">
                    31,
                Kiev, Ukraine
                </span>

我想选择3个项目,年龄,城市,国家,然后将它们分配给单个变量。

我正在使用此正则表达式选择完整字符串,但它不起作用。我很感激任何指导。

$regexAgeCityCountry = '/<span class="profilelastlogin">(.*?)<\/span>/';
                preg_match_all($regexAgeCityCountry, $page, $outputAgeCityCountry);

4 个答案:

答案 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);