以下两行是我的代码:
$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
内的换行符。
另外,如果我用{/ p>之类的东西替换file_get_contents
函数
$rank_content = "asdfas\nasdfasdfaswidth=m16m> teststring";
也没有问题,虽然\n
代表换行符,但不是吗?!
所以我理解RegEx在注意到包含换行符的字符串时遇到了问题吗?
如何通过删除某些行来过滤$rank_content
(其中有多行)的子字符串,直到出现"width="16" "
之类的内容为止? (可以在网站的源代码中看到)
答案 0 :(得分:0)
将m
修饰符替换为s
修饰符。 m
更改了^
和$
的行为,而s
更改了.
的行为
那就是说,你不应该用正则表达式解析HTML。认真。 Bad things happen
答案 1 :(得分:0)
我放弃它:似乎问题是haystack变量$ rank_content的LENGTH。它的长度约为90,000,而正则表达式匹配()的最大允许长度约为30,000,所以我认为正则表达式替换()是相同的。 如果有人感兴趣的话,解决这个问题肯定是可能的:看一下这个链接 - > PHP preg_match_all limit
我自己将使用另一种方法来解决问题,这种方法可以读取HTML单元等网站的内容,也可以在线后检索网站。