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