【发布时间】:2016-09-16 05:25:56
【问题描述】:
我刚才问了这个问题,但没有得到正确的答案,所以再试一次。
class Test {
public static void main (String[] args) throws java.lang.Exception
{
String file_name = "C:\\Temp\\Test.txt";
String string = FileUtils.readFileToString(new File(file_name), "UTF-8");
String regex = "^(ipv6 pim(?: vrf .*?)? rp-address .*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println("Matcher: " + matcher.group(1));
} else {
System.out.println("No Matches");
}
}
}
该文件包含很多行,超过 750 行,我想,我想提取与正则表达式值匹配的所有行。现在的问题是,我完成代码的方式不返回任何匹配项。我只在文件的第一行与正则表达式匹配时才这样做,如果它在中间的某个地方,那就没有运气了。我认为由于一切都在新行中,因此会引起问题。但是,如果模式不匹配在开头,即使编写一些将字符串转换为单行的代码也不会返回值。
匹配字符串示例:ipv6 pim rp-address 20:20:20::F
【问题讨论】:
-
您的正则表达式不起作用。在RegExr 上进行测试证明了这一点。我做了一个(脏)匹配:
(ipv6\spim\srp-address\s([\d]{2}:)+:.) -
我测试了它并且确实如此。如果使用多行模式(见下文)或将所有文本放在一行中,则前导
^(行首)可能会出现问题。 -
@CoronA 你是对的。问题是领先的^