如何在PHP中检测多个换行符?

时间:2010-10-01 15:32:06

标签: php

我需要检测多个\n。无论是2还是1000都没关系,只要它超过一个\n。什么是正则表达式(如果正则表达式是必要的)?

修改

我正在使用它:

$pregmatch = preg_match('#\\n\\n+#', $locations);
if ($pregmatch > 0) {
    echo 'more than one, this many: '.count($pregmatch);
} else
        echo 'less than one';

count($pregmatch)未返回检测到的多个\n的实际数量。怎么能实现呢?

4 个答案:

答案 0 :(得分:3)

您一般在寻找超过1 \n吗?如果是的话:

if (preg_match_all('#\\n#', $string, $matches) > 1) {
    //More than 1 \n
}

或没有正则表达式:

if (substr_count($string, "\n") > 1) {
    //More than 1 \n
}

甚至(但效率低得多):

$chars = count_chars($string);
if (isset($chars[ord("\n")]) && $chars[ord("\n")] > 1) {
    //More than 1 \n
}

如果连续:

if (preg_match_all('#\\n\\n+#', $string, $matches) > 0) {
    //More than 1 \\n in a row
}

修改:因此,根据您的修改,我可以总结出您想知道的两种可能性。

如果您想知道一行中\n个字符的数量(超过1个),您可以这样做:

if (preg_match('#\\n\\n+#', $string, $match)) {
    echo strlen($match[0]) . ' Consecutive \\n Characters Found!';
}

或者,如果您想知道每次出现:

if (preg_match_all('#\\n\\n+#', $string, $matches)) {
    echo count($matches) . ' Total \\n\\n+ Matches Found';
    foreach ($matches[0] as $key => $match) {
        echo 'Match ' . $key . ' Has ' . 
            strlen($match) . ' Consecutive \\n Characters Found!';
    }
}

答案 1 :(得分:0)

像(doc):

preg_match_all("[\n]*", $yourString, $outArray)

preg_match_all将返回已计算的数量以及outArray中的匹配数。

答案 2 :(得分:0)

您需要提供/ m修饰符,以便扫描范围超过在线:

if (preg_match('/\n\n/m', $str)) {
    echo "match";
} else {
    echo "no match";
}

答案 3 :(得分:0)

你可以避免使用正则表达式,节省CPU,这是一种优雅而棘手的方式:

$text_parts = explode("\n", $original_string);

现在你可以加入它,用以下内容代替换行符:

$new_string = implode("<br />", $text_parts);

我希望这会有所帮助