我正在使用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.