从preg_match_all()获取行号

bar*_*art 15 php regex

我正在使用PHP的preg_match_all()来搜索使用file_get_contents()导入的字符串.正则表达式返回匹配但我想知道找到匹配的行号.实现这一目标的最佳技术是什么?

我可以将文件作为数组读取并为每一行执行正则表达式,但问题是我的正则表达式匹配回车符(新行)的结果.

小智 13

好吧,有点晚了,也许你alrady解决了这个问题,但我必须这样做,而且相当简单.使用PREG_OFFSET_CAPTUREflag in preg_match将返回匹配的字符位置.让我们假设$ charpos,所以

list($before) = str_split($content, $charpos); // fetches all the text before the match

$line_number = strlen($before) - strlen(str_replace("\n", "", $before)) + 1;
Run Code Online (Sandbox Code Playgroud)

瞧!


Mih*_*der 11

只有正则表达式才能做到这一点.至少不干净.你能做些什么来使用PREG_OFFSET_CAPTUREpreg_match_all 的标志并对整个文件进行解析.

我的意思是你有匹配的字符串和启动偏移的阵列每串后仅算多少\r\n或者\n或者\r是文件的开头和每场比赛的偏移之间.匹配的行号将是不同的EOL终止符(\r\n| \n| \r)加号的数量1.