Пожалуйста, прокомментируйте при голосовании против! @Shadow Я предполагаю, что это было отвергнуто, поскольку в запросе OP нет индекса совпадения ...
Эль Ронноко
4
Хорошо ... Я проголосовал против, потому что этот ответ не касается вопроса.
3
Ваше регулярное выражение тоже неверно. Первый (.*)изначально потребляет всю строку, затем он отступает достаточно далеко, чтобы (\d+)сопоставить одну цифру, а затем вторая использует (.*)все, что осталось. Я бы сказал, не особо полезный результат. О, и вы group(3)упустили из своих результатов.
Ответы:
Используйте Matcher :
public static void printMatches(String text, String regex) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); // Check all occurrences while (matcher.find()) { System.out.print("Start index: " + matcher.start()); System.out.print(" End index: " + matcher.end()); System.out.println(" Found: " + matcher.group()); } }
источник
специальный выпуск ответа от Жана Логарта
public static int[] regExIndex(String pattern, String text, Integer fromIndex){ Matcher matcher = Pattern.compile(pattern).matcher(text); if ( ( fromIndex != null && matcher.find(fromIndex) ) || matcher.find()) { return new int[]{matcher.start(), matcher.end()}; } return new int[]{-1, -1}; }
источник
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // String to be scanned to find the pattern. String line = "This order was places for QT3000! OK?"; String pattern = "(.*)(\\d+)(.*)"; // Create a Pattern object Pattern r = Pattern.compile(pattern); // Now create matcher object. Matcher m = r.matcher(line); if (m.find( )) { System.out.println("Found value: " + m.group(0) ); System.out.println("Found value: " + m.group(1) ); System.out.println("Found value: " + m.group(2) ); } else { System.out.println("NO MATCH"); } } }
Результат
Found value: This order was places for QT3000! OK? Found value: This order was places for QT300 Found value: 0
источник
(.*)
изначально потребляет всю строку, затем он отступает достаточно далеко, чтобы(\d+)
сопоставить одну цифру, а затем вторая использует(.*)
все, что осталось. Я бы сказал, не особо полезный результат. О, и выgroup(3)
упустили из своих результатов.