我正在整理一些行,有些包含电子邮件,有些则没有。
我需要删除少于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 :(得分: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.如果较小,则清除线路,如果不是,则继续。