查找行号某些文本已打开

时间:2010-11-05 17:30:08

标签: php

找到特定字符串所在的哪一行的最佳方法是什么?我知道我可以迭代所有的行,但问题是被搜索的字符串可能是多行的。例如,这可以通过正则表达式来解决吗? 感谢

3 个答案:

答案 0 :(得分:1)

这是可以解决的。首先搜索一次性搜索所有行的模式,例如使用\n。然后计算它之前\n的数量。

答案 1 :(得分:0)

好吧,如果你正在谈论一个文件,那么迭代的最佳方式是:

$lines = 0;
while ($line = fgets($f)) {
    $lines++;
    if (stripos($line, $searchWord) !== false) {
        $foundOnLine = $lines;
        break;
    }
}

但是如果它是一个字符串,你可以做一些黑客攻击(在匹配之前找到文本,然后返回匹配数):

$foundOnLine = preg_match_all('#\n#', stristr($string, $searchWord, true), $a);

但请注意,对于not-found-in-string和found-on-first-line,它将返回行0。如果你想区分它们:

$found = function($string, $searchWord) {
    $pretext = stristr($string, $searchWord, true);
    $a = null;
    return $pretext === false ? false : preg_match_all('#\n#', $pretext, $a);
}

如果找不到,则返回false,如果在第一行,则返回0 ...

答案 2 :(得分:0)

我总是尽量避免循环

...无环

function getLine( $haystack, $needle ) {
    return substr_count( substr( $haystack, 0, strpos($haystack, $needle ) ), "\n" ) + 1;
}

working example