删除包含某些特定字符的行

时间:2014-06-20 07:45:52

标签: php html

我想删除包含--~

的txt文件行

这里是代码:

function removeUnusedLines($string){
    if (strpos($string,'--') > 0 || strpos($string,'~') > 0 ) {
       $string = preg_replace( "/\r|\n/", "", $string );
       return $string;
    }
}
$file  = "C:/AppServ/www/kbbi/try.txt";
$lines = file($file);
foreach ($lines as $line){
   $remove = removeUnusedLines($line);
   echo $remove.'<br>';
}

示例:

Poetry is a form of literature ~ that uses aesthetic and rhythmic
qualities of language —- such as phonaesthetics, sound symbolism

metre to evoke meanings in addition to, or in place of, the prosaic ostensible meaning

从示例中,我想得到最后一行,因为第一行和第二行包含~--

但它不会删除该行。请帮帮我,谢谢你:)。

3 个答案:

答案 0 :(得分:1)

您正在寻找preg_grep

$lines = preg_grep('/--|~/', file($file), PREG_GREP_INVERT);

答案 1 :(得分:0)

与你的sintax一起,你不会抓住以 - 和〜

开头的字符串

根据strpos documentation

  

返回针存在于相对于haystack字符串开头的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1   如果未找到针,则返回 FALSE

function removeUnusedLines($string){
    if (strpos($string,'--') === FALSE && strpos($string,'~') === FALSE ) {
       $string = preg_replace( "/\r|\n/", "", $string );
       return $string;
    }
}

你必须恢复条件:)如果没有找到则返回字符串。

答案 2 :(得分:0)

你可以使用preg_replace:

$string = preg_replace( '/.*(--|~).*[\r]?[\n]?/', '', $string);

因此,它会在一行.*上查找所有内容,然后是--~,然后是该行.*上的所有内容。可选地后面是回车\r和/或新行\n

DEMO