2010-09-23 17 views
3

我正在通过一些行进行排序,一些包含电子邮件,有些则没有。PHP如何删除少于6个字符的行

我需要删除所有少于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); 

你可以看到我在做什么,但是我认为它有点多。

感谢您的指导。

+0

这是刚刚开始读取文件的例程的顶部。 – Stephayne 2010-09-23 12:20:51

回答

2

\b匹配“单词边界” - 即单词的开始或结束。它会触发单词之间的空格和标点符号,因此您将有效地删除每个1到5个字符之间的每个,而不是按预期的每一行。 (顺便说一句,如果你有串反斜线,你应该要么逃避他们或用单引号代替,以避免未来的陷阱。)

你可以尝试

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

随着/m修改,^$分别匹配每行的开始和结束,而不是整个字符串的开始和结束。它恰好在换行符之前匹配,因此该行很可能会变成空白,而不是被删除,除非您在换行符后面也匹配换行符。

+0

谢谢你指出,我将删除1到5之间的每一行中的每一个字。这个文件是这些单词的单一列,我没有澄清,但是,你的例子教我如何做到这一点,谢谢您!这非常有用,我今天已经学会了! – Stephayne 2010-09-23 13:03:29

+0

@Stephayne:如果答案是你正在寻找的商标被接受(在左边的投票数下)。 – BrunoLM 2010-09-23 13:09:45

6

对于校验线长度,您可以使用strlen()mb_strlen()(对于多字节字符串)。

+1

发表评论在他的问题下的评论部分。有一个按钮“添加评论”,你可以点击并添加你的评论。 – BrunoLM 2010-09-23 12:57:45

+1

唯一需要注意的是,如果字符串是多字节,则必须将mb_strlen()与mb_internal_encoding()一起使用。 – bisko 2010-09-23 13:32:16

+0

@bisko:已更新,谢谢 – Svisstack 2010-09-23 13:39:42

0

为什么不在新行处爆炸数据,检查单个行长是否小于6.如果不足,则清除行,否则继续。

2

可以说,你的线阵:

$lines= array('less', 'name', 'some long name', '[email protected]'); 

,并且希望所有超过6个字符打印出来......

<?php 
$lines= array('less', 'name', 'some long name', '[email protected]'); 

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 
[email protected] 
+0

谢谢,这对我很有用。 – Stephayne 2010-09-23 13:15:53

相关问题