2010-11-05 3 views
0

Что такое лучший способ найти, на какой строке находится определенная строка? Я знаю, что могу выполнять итерацию по всем строкам, но поймать, что поиск строки может быть многострочным. Может ли это быть разрешено регулярным выражением? ThanksПоиск номера строки, определенного текста, на

+0

если вы используете Флаг PREG_OFFSET_CAPTURE с preg_match, то ваша проблема сводится к тому, чтобы найти, какая строка содержит строку, чтобы найти, на какой строке находится ее первый символ. –

+0

Было бы проще работать над этой проблемой, если бы вы могли предоставить тестовый пример ... Возможно, это похоже на 15 строк текста и два примера «строки поиска»? – gnarf

ответ

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

Я всегда стараюсь избегать петель, когда я могу

loopless ...

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

working example