Что такое лучший способ найти, на какой строке находится определенная строка? Я знаю, что могу выполнять итерацию по всем строкам, но поймать, что поиск строки может быть многострочным. Может ли это быть разрешено регулярным выражением? ThanksПоиск номера строки, определенного текста, на
0
A
ответ
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;
}
если вы используете Флаг PREG_OFFSET_CAPTURE с preg_match, то ваша проблема сводится к тому, чтобы найти, какая строка содержит строку, чтобы найти, на какой строке находится ее первый символ. –
Было бы проще работать над этой проблемой, если бы вы могли предоставить тестовый пример ... Возможно, это похоже на 15 строк текста и два примера «строки поиска»? – gnarf