我是正则表达式的新手,我的问题可能是非常基本的问题。
我想创建一个可以在特定行号上搜索表达式的正则表达式。
例如。 我有资料
"\nerferf erferfre erferf 12545" +
"\ndsf erf" +
"\nsdsfd refrf refref" +
"\nerferf erferfre erferf 12545" +
"\ndsf erf" +
"\nsdsfd refrf refref" +
"\nerferf erferfre erferf 12545" +
"\ndsf erf" +
"\nsdsfd refrf refref" +
"\nerferf erferfre erferf 12545" +
我想在第 7 行搜索号码 1234。它可能也可能不出现在其他线路上。
我试过
"\\n.*\\n.*\\n.*\\n.*\\n.*\\n.*\\d{4}"
但我没有得到结果。
请帮我解决正则表达式问题。
最佳答案
首先,您的换行符
字符应该放在行尾。这样,想象一条特定的线会更容易。 以下解释基于此修改。
现在,要到达第 7 行,您首先需要跳过前 6 行,您可以使用 {n,m}
量词来完成。您不需要编写 .*\n
6 次。所以,这将是这样的:
(.*\n){6}
然后您在第 7 行,您可以在其中匹配所需的数字。那部分将是这样的:
.*?1234
然后使用 .*
因此,您的最终正则表达式如下所示:
(?s)(.*\n){6}.*?1234.*
因此,只需使用 String#matches(regex)
使用此正则表达式的方法。
附言(?s)
用于启用单行匹配。由于点(.)
默认不匹配换行符。
要打印你匹配的东西,你可以使用捕获组:
(?s)(?:.*\n){6}.*?(1234).*
如果在 组 1 中匹配,这将捕获 1234
。虽然这看起来很不寻常,但您捕获了一个与您匹配的确切字符串 - 就像捕获 1234
在这里没有意义,因为您知道您正在匹配 1234
,而不是 \\d
,在这种情况下,您可能会对这些数字到底是什么感兴趣。
关于java - 在 Java 中使用正则表达式搜索特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145093/