2010-11-05 82 views
0

找到某个字符串在哪一行上的最佳方法是什么?我知道我可以遍历所有的行,但是捕获的是被搜索的字符串可能是多行的。例如,这可以通过正则表达式解决吗? 谢谢查找行号某些文本是

+0

如果使用带有preg_match的PREG_OFFSET_CAPTURE标志,那么你的问题就会从找到一个字符串在哪一行到找到它的第一个字符在哪一行上。 – 2010-11-05 17:33:15

+0

如果你能提供一个测试用例,可能会更容易解决这个问题......也许像15行文本和两个示例“搜索字符串”? – gnarf 2010-11-05 17:33:15

回答

1

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

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); 

但是请注意,它会返回线0两个未找到,在串并发现,上一线。如果要区分它们:

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

,将返回false如果没有找到,或者0如果在第一线......

0

我总是尽量避免循环时,我可以

无回路...

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

working example