下面是我的代码:
$rank_content = file_get_contents('https://www.championsofregnum.com/index.php?l=1&ref=gmg&sec=42&world=2');
$tmp_ = preg_replace("/.+width=.16.> /Uis", "", $rank_content, 1);
上面的第二行导致一个无限循环。相反,以下替代方法可以工作:
$tmp_ = preg_replace("/.+width=.16.> /Ui", "", $rank_content, 1);
$tmp_ = preg_replace("/[^§]+width=.16.> /Uis", "", $rank_content, 1);
但遗憾的是,它们并没有给我我想要的-两个替代方案都不包括$rank_content
中的换行符。
同样,如果我用
之类的东西替换file_get_contents
函数$rank_content = "asdfas'nasdfasdfaswidth=m16m> teststring";
也没有问题,虽然'n
也代表换行,不是吗?!
所以我理解它正确,RegEx有问题,注意到一个字符串的换行吗?
我如何通过删除一些行来过滤$rank_content
(其中有多行)的子字符串,直到出现"width="16" "
之类的东西?(可查看网站源代码)
将m
修饰符替换为s
修饰符。m
改变了^
和$
的行为,而s
改变了.
的行为
也就是说,不应该用regex解析HTML。认真对待。
我放弃了:似乎问题是干草堆变量$rank_content的长度。它的长度约为90,000,而regex match()允许的最大长度约为30,000,所以我猜regex replace()也是如此。如果有人感兴趣,解决这个问题肯定是可能的:请查看这个链接-> PHP preg_match_all limit
我自己将使用另一种方法来解决这个问题,例如阅读HTML Unit网站的内容,或者可能逐行检索网站。