Я использовал http://www.regexplanet.com/advanced/java/index.html для проверки написанного мной регулярного выражения.
Регулярное выражение: \ A [\ d + (- \ d +) {0,1}\ | \ d + \ | \ d + \ | [Ю.Н.] {1}] ([\ d + (- \ d +) {0,1} \ | \ d + \ | \ d + \ | [Ю.Н.] {1}])* \ z
Я пытаюсь сопоставить строки вида '[30-41 | 2 | 21 | Y]' ИЛИ [15-23 | 45 | 12 | Y], [15 | 42| 6 | Y] 'etc
Регулярное выражение, кажется, отлично работает при тестировании на этом сайте, однако, когда я использую его в своем собственном Java-коде (см. Ниже), оно дает мне неожиданные совпадения (я вставил консольвывод ниже кода).Кто-нибудь знает, что я делаю здесь не так?
РЕДАКТИРОВАТЬ: Как указал Stema, у меня была строка ввода и шаблон в неправильном порядке при создании Pattern и Matcher.Я поменял эти раунды сейчас, но теперь получаю «совпадение не найдено».
public static void testRegex(String inputString){
String regex = "\\A\\[\\d+(\\-\\d+){0,1}\\|\\d+\\|\\d+\\|[YN]{1}\\](,\\[\\d+(\\-\\d+){0,1}\\|\\d+\\|\\d+\\|[YN]{1}\\])*\\z";
Pattern pattern = Pattern.compile(inputString);
Matcher matcher = pattern.matcher(regex);
boolean found = false;
while(matcher.find()){
System.out.println("Found at :");
System.out.println("start - " + matcher.start());
System.out.println(", end - " + matcher.end() + ". ");
found = true;
}
if(!found){
System.out.println("no match found");
}
}
public static void main(String[] args){
testRegex("[61|12|6]");
}
Вывод на консоль, который я получаю:
Найдено в: начало - 17, конец - 18. Найдено в: начало - 20, конец - 21. Найдено в: начало -25, конец - 26. Найдено в: начало - 30, конец - 31. Найдено в: начало - 36, конец - 37. Найдено в: начало - 57, конец - 58. Найдено в: начало - 60, конец - 61.Найдено в: начало - 65, конец - 66. Найдено в: начало - 70, конец - 71. Найдено в: начало - 76, конец - 77.