【发布时间】:2020-09-02 15:35:28
【问题描述】:
我的 php 类中有一个正则表达式,用于从远程文件中删除一些不需要的字符。 我的问题是正则表达式根本不起作用,我注意到字符仍然存在于解析文件的某个点。
这是文件中不会被解析的部分(它是数组的一部分)
"||clickbank.net/*offer_id=$popup,third-party"
"! IP addresses"
"||130.211.$popup,third-party,domain=~in-addr.arpa"
"||142.91.$popup,third-party,domain=~in-addr.arpa"
"||185.147.34.126^$popup,third-party"
"||216.21.13.$popup,domain=~in-addr.arpa"
"||35.232.188.118^$popup"
"||5.45.79.15^$popup"
"! IP Regex (commonly used, hax'd IP addresses)"
"/^https?:\/\/(35|104)\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}\//$popup,third-party"
""
这是预期的输出
"*://*.clickbank.net/*"
"://130.211.*/*"
"://142.91.*/*"
"://185.147.34.126/*"
"://216.21.13/*"
"://35.232.188.118/*"
"*://5.45.79.15/*"
这是代码:
private static function parseFilterLists( $filters )
{
foreach( $filters as $filter ){
$file = file_get_contents( $filter );
self::$parsed = preg_replace( '/\!.*/', '', $file );
self::$parsed = preg_replace( '/\|\|([^\^\$=,]+).*/', '*://*.$1/*', $file );
}
return explode( "\n", self::$parsed );
}
我要删除的行的开头有 ! 字符,我还需要从数组中删除最后两行,因为一个是空的,另一个是正则表达式模式,但它不是我的范围所必需的。
具有! 字符的其他行使用preg_replace() 从函数中正确处理并被删除。
另外当类的方法在解析输入文件时,也有一些行不会被正确处理,比如这个输入行||clickbank.net/offer_id"应该变成"*://*.clickbank.net/*"但是会在这个处理并返回一路"*://*.clickbank.net/*offer_id/*"
我该如何解决这个问题?
【问题讨论】:
-
请不要张贴图片,只需将文字放在之前和之后。
-
([^\^\$=,]+)匹配任何不是^或$或=或,的字符,因此它匹配第1 组中的clickbank.net/offer_id"。 -
好的,但是如果我删除
^,则其他行的替换可以正常工作,如果我删除^,输出将不会按预期格式化。如何解决这两个问题? -
我们无法回答没有示例文件和预期结果,文本,而不是图像。
-
@Toto 预期的输出已经在问题
"*://*.clickbank.net/*"中。我将更新问题以添加所需的文本。
标签: php regex preg-replace