“preg_replace()”无法正常工作。

问题描述 投票:0回答:3

我有一个文本文件,我提取了所有带有

http://
的域名地址 现在我想替换所有的
http://
。在我的与“”匹配的数组中,但没有发生任何事情,我什至没有收到错误

$list = file_get_contents( 'file.txt' );
preg_match_all( "/http:\/\/.([a-z]{1,24}).([a-z^0-9-]{1,23}).([a-z]{1,3})/", $list, $matches );

for ($i=0; $i>=50; $i++) {
    $pattern = array();
    $replacement = array();
    $pattern[0][$i] = "/http:\/\/.[w-w]{1,3}/";
    $replacement[0][$i] = '';

    preg_replace( $pattern[0][$i], $replacement[0][$i], $matches[0][$i] );
}

print_r($matches);
php arrays preg-replace
3个回答
1
投票

你的循环永远不会运行,因为

0 >= 50
会产生
false
。也就是说,您正在寻找的是地图操作:

$matches = array_map(function($match) {
    return preg_replace('~^http://w{1,3}~', '', $match);
}, $matches[0]);
print_r($matches);

0
投票

preg_match_all
也有问题。正则表达式中的句点匹配任何字符。

$list = file_get_contents( 'file.txt' );
preg_match_all( "/http:\/\/([a-z]{1,24})\.([a-z^0-9-]{1,23})\.([a-z]{1,3})/", $list, $matches );

$pattern = "/http:\/\/(.[w-w]{1,3})/";
$replacement = '$1';
$matches[0] = preg_replace( $pattern, $replacement, $matches[0] );

print_r($matches);

0
投票

最好只遍历字符串一次,并用清理后的字符串填充数组。

我无法正确测试我提出的正则表达式的正确性,因为没有提供示例输入字符串,并且没有确切期望结果的表达式。我确实对您的 URL 匹配模式的一般可用性有一些担忧。

preg_match_all(
    "~https?://(?:w{3}\.)?([a-z]{1,24}\.[a-z0-9-]{1,23}\.[a-z]{1,3})~",
    file_get_contents('file.txt'),
    $matches
);
var_export(
    array_slice($m[1] ?? [], 0, 50)
);

这将打印经过清理的 URL 字符串的平面数组。

© www.soinside.com 2019 - 2024. All rights reserved.