2013-11-25 5 views
0

Я следующее содержимое файла, и я стараюсь, чтобы соответствовать рег пояснено ниже:Matching не многострочный регулярное выражение

-- file.txt (doesn't match single/in-line text) -- 
test On blah more blah wrote: 
blah blah blah 
blah blah 
blah 
--------------- 

Если я прочитал содержимое файла сверху в строку и попытаться соответствовать " на ... писал:»часть я не могу получить матч:

// String text = <file contents from above> 
    Pattern PATTERN = Pattern.compile("^(On\\s(.+)wrote:)$"); 
    Matcher m = PATTERN.matcher(text); 
    if (m.find()) { 
     System.out.println("Never gets HERE???"); 
     // TODO: Strip out all characters after the match and any \s or \n before 
    } 

по существу я хочу следующий вывод:

-- file2.txt -- 
test  
--------------- 

ответ

1

Может быть, это поможет вам получить результат, который вы хотите:

 String text = "test On blah more blah wrote:\n" 
       + "blah blah blah\nblah blah\nblah\n"; 
     StringWriter sw = new StringWriter(); 
     PrintWriter pw = new PrintWriter(sw); 
     Pattern PATTERN = Pattern.compile("^(.*?)\\s*On\\s(.+)wrote:$", 
       Pattern.MULTILINE); 
     Matcher m = PATTERN.matcher(text); 
     if (m.find()) { 
      pw.println(m.group(1)); 
     } 
     pw.close(); 
     System.out.println(sw); 

Pattern.MULTILINE Javadoc: В многострочном режиме выражения^и $ совпадают сразу или непосредственно перед этим, соответственно, терминатор линии ... Я также добавил (. *?), Который соответствует всем до первого «Вкл».

+0

классный, спасибо за ответ. это то, что я определенно ищу ... теперь, когда я получаю матч, как я могу заменить все, кроме «теста» в этом случае? Я попробовал text = m.replaceAll (""), но это заменяет все. – JaJ

+0

Если вы хотите сохранить «тест» (и другие несогласованные строки), используйте «m.replaceAll (« $ 1 »)'. '$ 1' будет расширен до первой сопоставимой группы. – halfbit

+0

спасибо, поэтому, если я просто хочу сохранить тест, должен ли я использовать то, что возвращается на m.group (1), или есть способ, которым я могу включить replaceAll («)? – JaJ

0

, так как шаблон, который вы ищете, не запускает линию, удалите ^. Это соответствует началу строки, но ваша строка, которую вы ищете, начинается со слова «тест».

Однако, если вы хотите, чтобы захватить «тест», а затем вставьте (\\w+)\\s после ^ сформировать ^(\\w+)\\s(On\\s(.+)wrote:)$

Смежные вопросы