PHP如何删除少于6个字符的行

时间:2010-09-23 12:09:55

标签: php preg-replace

我正在整理一些行,有些包含电子邮件,有些则没有。

我需要删除少于6个字符的所有行。

我做了一点冲浪,发现没有可靠的答案,所以我试着写下我的第一个表达。

请告诉我这是否有效。我做对了吗?

$six-or-more = preg_replace("!\b\w{1,5}\b!", "", $line-in); 

接下来我“偷”了,这实际上可能是多余的。

$no-empty-lines = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $six-or-more);
$lines = preg_split("/[\s]*[\n][\s]*/", $no-empty-lines);

你可以看到我想要做的事情但是,我觉得它有点多了。

感谢您的教程。

4 个答案:

答案 0 :(得分:6)

您可以使用strlen()mb_strlen()(对于多字节字符串)来检查行长。

答案 1 :(得分:2)

假设您的行在数组中:

$lines= array('less', 'name', 'some long name', 'my.email@email.email');

并且您希望打印出超过6个字符的所有内容...

<?php
$lines= array('less', 'name', 'some long name', 'my.email@email.email');

foreach ($lines as $line) {
    if(strlen($line) < 6) { //this chect if string length is higher of 5
        continue; //if not skip
    }
    else {
        echo $line . '<br />'; //print line or do what you want :)
    }
}

?>

以上示例将输出:

some long name
my.email@email.email

答案 2 :(得分:2)

\b匹配“单词边界” - 即单词的开头或结尾。它还会触发单词之间的空格和标点符号,因此您可以有效地删除1到5个字符之间的每个,而不是按预期删除每一行。 (顺便说一句,如果你在字符串中有反斜杠,你应该转义它们或使用单引号来避免将来的陷阱。)

你可以尝试

$six_or_more = preg_replace('/^.{0,5}$[\r\n]*/m', '', $line_in);

使用/m修饰符,^$分别匹配每行的开头和结尾,而不是整个字符串的开头和结尾。但是,它在换行符之前匹配,因此除非您在“结束后”匹配换行符,否则该行很可能会变为空白而不会被删除。

答案 3 :(得分:0)

为什么不在新线路上爆炸数据,检查单个线路长度是否小于6.如果较小,则清除线路,如果不是,则继续。