2010-11-05 143 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