免责声明:这并不意味着是一个实际的解决方案,而是说明了使用出色的正则表达式hack扩展的一种方式。而且,它仅在允许捕获组引用自己的正则表达式引擎上起作用。例如,您可以在Notepad ++中使用它,因为它使用了PCRE引擎,但在Java中却没有。
假设您的文件是:
some code
more code
hey, hello!
more code
在文件底部,粘贴:1:2:3:4:5:6:7
,其中:
在代码的其余部分中找不到分隔符,其中数字至少与行数一样高。
然后,要获得第一个的行hello
,可以使用:
(?m)(?:(?:^(?:(?!hello).)*(?:\r?\n))(?=[^:]+((?(1)\1):\d+)))*.*hello(?=[^:]+((?(1)\1)+:(\d+)))
组2将捕获包含hello的第一行的行号。