我想.java使用正则表达式搜索文件,不知道是否有一种方法可以检测到文件中找到匹配项的行。
.java
例如,如果我寻找hello与Java正则表达式匹配的内容,是否可以通过某种方法告诉我这些匹配内容位于第9、15和30行?
hello
可能…使用Regex Trickery!
免责声明:这并不意味着是一个实际的解决方案,而是说明了使用出色的正则表达式hack扩展的一种方式。而且,它仅在允许捕获组引用自己的正则表达式引擎上起作用。例如,您可以在Notepad ++中使用它,因为它使用了PCRE引擎,但在Java中却没有。
假设您的文件是:
some code more code hey, hello! more code
在文件底部,粘贴:1:2:3:4:5:6:7,其中:在代码的其余部分中找不到分隔符,其中数字至少与行数一样高。
:1:2:3:4:5:6:7
:
然后,要获得第一个的行hello,可以使用:
(?m)(?:(?:^(?:(?!hello).)*(?:\r?\n))(?=[^:]+((?(1)\1):\d+)))*.*hello(?=[^:]+((?(1)\1)+:(\d+)))
组2将捕获包含hello的第一行的行号。
(?>\1?)
说明
(?:^(?:(?!hello).)*(?:\r?\n))
(?=[^:]+((?(1)\1):\d+))
[^:]+
((?(1)\1):\d+))
(?(1)\1)
*
.*hello
(?=[^:]+((?(1)\1)+:(\d+)))
(\d+)