Я хочу применить свое регулярное выражение не только к первой строке текстового файла, но и ко всем строкам. В настоящее время он соответствует только тогда, когда все соответствующие соответствия находятся на одной линии. И если соответствующее совпадение продолжается на следующей строке - это совсем не совпадает.Как применить регулярное выражение ко всему файлу, а не только строку за строкой?
class Parser {
public static void main(String[] args) throws IOException {
Pattern patt = Pattern.compile("(include|"
+ "integrate|"
+ "driven based on|"
+ "facilitate through|"
+ "contain|"
+ "using|"
+ "equipped"
+ "integrate|"
+ "implement|"
+ "utilized to facilitate|"
+ "comprise){1}"
+ "[\\s\\w\\,\\(\\)\\;\\:]*\\."); //Regex
BufferedReader r = new BufferedReader(new FileReader("E:/test/test.txt")); // read the file
String line;
PrintWriter pWriter = null;
while ((line = r.readLine()) != null) {
Matcher matcher = patt.matcher(line);
while (matcher.find()) {
try{
pWriter = new PrintWriter(new BufferedWriter(new FileWriter("E:/test/test1.txt", true)));//append any given input
pWriter.println(matcher.group()); //write the result of matcher to the new file
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
if (pWriter != null){
pWriter.flush();
pWriter.close();
}
}
System.out.println(matcher.group());
}
}
}
}
использовать глобальный модификатор – Razib
Можете ли вы предоставить данные теста? У вас есть новые строки между выражениями, которые вы пытаетесь сопоставить? – maraca
@Razib: В Java нет «глобального модификатора», он не нужен. Но даже на языках, которые его используют (например, JavaScript или Perl), это не относится к этой проблеме. –