2013-07-17 3 views
-1

Это своего рода продолжение к моей другой вопрос simple Java Regex read between twoЧтение определенного текста в Java

Теперь мой код выглядит следующим образом. Я читаю содержимое файла, просматривая что-то между src и -t1. Запуск этого кода вернет 1 правильную ссылку, но исходный файл содержит 10, и я не могу определить цикл. Я думал, что другой способ может быть, чтобы написать на второй файл на диске и удалить первую ссылку из оригинального источника, но я не могу закодировать, что либо:

File workfile = new File("page.txt"); 
BufferedReader br = new BufferedReader(new FileReader(workfile)); 
String line; 

while ((line = br.readLine()) != null) { 
    //System.out.println(line); 


    String url = line.split("<img src=")[1].split("-t1")[0];  
    System.out.println(url); 

    } 
    br.close(); 
+2

Не могли бы вы показать нам свой входной файл и ваш ожидаемый результат? –

+0

Я удалил свой ответ (у которого были проблемы, конечно), потому что использование 'split()' этот путь ... неправильно, и я не хочу его поддерживать дальше. – PaulProgrammer

+0

@ steve: хм ... может быть. @ Павел . Tnx в любом случае. Я открыт для другого предложения, пока он выполняет свою работу :) – anno

ответ

1

Я думаю, что вы хотите что-то вроде

import java.util.regex.*; 

Pattern urlPattern = Pattern.compile("<img src=(.*?)-t1"); 

while ((line = br.readLine()) != null) { 
     Matcher m = urlPattern.matcher (line); 
     while (m.find()) { 
      System.out.println(m.group(1)); 
     } 
} 

Регулярное выражение ищет строки, начинающиеся с <img src= и заканчивающиеся на -t1 (и ищет кратчайшие подстроки, так что в строке можно найти более одного). Часть в круглых скобках является «группой захвата» для захвата текста, который сопоставляется; это называется группой 1. Затем для каждой строки мы петлим на find(), чтобы найти все вхождения в каждой строке. Каждый раз, когда мы находим его, мы печатаем то, что находится в группе 1.

+0

возвращает пусто. Он заканчивает код, потому что я добавил в конец System.out.println («All Done!»); – anno

+0

Что значит «возвращает пустое»? Вы говорите, что внутренний цикл никогда ничего не выводит (т. Е. M.find() всегда ложно), или вы имеете в виду что-то еще? – ajb

+0

Извините, жаль, что я плохой не удалил и пока не добавил ваш. Он отлично работает :) – anno

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