PHP删除字符前的所有内容

时间:2014-05-10 17:01:21

标签: php

所以我在test.txt文件中有这个:

5436 : Ball Of Yarn
1849 : Blue Border Collie Headband
24063 : Blue Border Collie Hoodie

我试图在"之前删除所有内容:",这是我的PHP代码:

$str = file_get_contents("test.txt");
$string2 = substr($str, ($pos = strpos($str, ' : ')) !== false ? $pos + 1 : 0);
file_put_contents("test.txt", $string2);

请帮帮我

4 个答案:

答案 0 :(得分:2)

你可以这样做:

$arr = file("test.txt");
foreach ($arr as $line) {
   echo substr($line, ($pos = strpos($line, ' : ')) !== false ? $pos + 1 : 0);
}

答案 1 :(得分:0)

如果您不害怕使用正则表达式,您可以使用:(如果之前的字符:仅限数字,则有效)。如果您需要其他字符,请告诉我。

$str = file_get_contents("test.txt");
$string2 = preg_replace('/[0-9 ]+:/', "", $str);
file_put_contents("test.txt", $string2);

这完全符合您的要求并保持您的结构;只是改变了第二行:)

详细了解正则表达式herethis基本教程,这些教程开头看起来不错。

答案 2 :(得分:0)

您可以尝试使用fgetcsv。以下是使用示例:

$ cat test.txt
5436 : Ball Of Yarn
1849 : Blue Border Collie Headband
24063 : Blue Border Collie Hoodie
$ cat test.php
#!/usr/bin/php
<?php
    $in_file="test.txt";
    if (false !== ($handle = fopen($in_file, "r"))){
        while(false !== ($line = fgetcsv($handle, 0, ":"))){
            if(isset($line[1]) && $line[1]){
                echo "LINE=" . trim($line[1]) . "\n";
            }
        }
    }
?>
$ ./test.php
LINE=Ball Of Yarn
LINE=Blue Border Collie Headband
LINE=Blue Border Collie Hoodie

使用preg_replace的另一种解决方案:

$ cat test.php
#!/usr/bin/php
<?php
    $in_file="test.txt";
    if (false !== ($handle = fopen($in_file, "r"))){
        while(false !== ($line = fgets($handle))){
            echo "LINE=" . trim(preg_replace("/^[^:]*:\ ?([^:]*)$/", "$1", $line)) . "\n";
        }
    }
?>
$ ./test.php
LINE=Ball Of Yarn
LINE=Blue Border Collie Headband
LINE=Blue Border Collie Hoodie

答案 3 :(得分:0)

这是一个使用array_map来改变每行内容然后写入文件的解决方案,可能有更好的方法为你剥离线:

function editLine($line) {
    return strstr($line, ':') ?: $line;
}

$lines = file('test.txt');
$editedLines = array_map('editLine', $lines);
file_put_contents('test.txt', implode('', $editedLines));