2013-06-27 3 views
1
вхождения

У меня есть это регулярное выражение:Java регулярного выражения соответствия каждого отдельно

<a href(.*foo.bar.*)a> 

Для этой строки, она дает мне только один матч, но мне это нужно, чтобы дать 3 матча.

<a href="https://foo.bar/1">First</a> RANDOM TEXT COULD BE HERE <a href="https://foo.bar/2">Second</a> RANDOM TEXT COULD BE HERE <a href="https://foo.bar/3">Third</a> 

Таким образом, каждый a href должен быть индивидуальным.

Как я мог это сделать?

EDIT:

Этот код выполняет поиск совпадений:

Pattern pattern = Pattern.compile("<a href(.*foo.bar.*)a>"); 
Matcher matcher = pattern.matcher(body); 
List<String> matches = new ArrayList<String>(); 
while (matcher.find()) { 
    matches.add(matcher.group()); 
} 
+1

Можете ли вы показать нам код, который ищет совпадения, пожалуйста? – JREN

+0

@JREN: добавлен код искателя – Jaanus

+1

[* Разбор HTML - это проблема. Вам не нужно ее решать. Вам просто нужно быть ленивым. *] (Http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html) –

ответ

6

Изменить на:

<a href(.*?foo\.bar.*?)a> 

Она удаляет алчность. И реальные точки должны быть экранированы до \..

+0

Спасибо, это сработало. Вы используете здесь ленивую звезду? – Jaanus

+0

Проблема возникла, начало кажется жадным также. Регулярное выражение будет соответствовать всей этой части, но нужно только принять окончание. ' TEST TESTMY REAL PAGE' – Jaanus

+0

Давайте будем более конкретными: ' dda

0

Надежда ниже код поможет вам:

int noOfTimefoundString = 0; 
Pattern pattern = Pattern.compile("<a href=\"https://foo.bar"); 
Matcher matcher = pattern.matcher(body); 
List<String> matches = new ArrayList<String>(); 
while (matcher.find()) { 
    matches.add(matcher.group()); 
    noOfTimefoundString++; 
} 
Iterator matchesItr = matches.iterator(); 
while(matchesItr.hasNext()){ 
    System.out.println(matchesItr.next()); 
} 
System.out.println("No. of times search string found = "+noOfTimefoundString); 
+0

Да, но мне нужно их хранить где-то. Мне нужны полные URL-адреса с тегами. – Jaanus

1

Использование .*? вместо .*. Жадный квантификатор сопоставляет символы как можно больше, в то время как неохотный квантификатор соответствует наименьшему количеству символов в одной операции поиска.

Кроме того, используйте foo\.bar, если вы намерены соответствовать буквальному тексту «foo.bar».

+0

Спасибо, как объяснение. – Jaanus