1

Тема: Проблема з регулярними виразами

Pattern p = Pattern.compile("(?i)((^[aeiou])|(\s+[aeiou]))\w+?[aeiou]\b");
    Matcher m = p.matcher("Arline ate eight apples and one orange while Anita hadn't any");

ось є текс регулярного виразу, чому вибиває помилку:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

2

Re: Проблема з регулярними виразами

Вам треба заекранувати апостроф у hadn't: hadn\'t. Це скоріше всього.

3

Re: Проблема з регулярними виразами

підкреслює (неправильно введено) сам регулярний вираз: "(?i)((^[aeiou])|(\s+[aeiou]))\w+?[aeiou]\b"
а в Matcher'і вказується просто строка (String) а там може бути все шо завгодно. я розумію в чужому регулярному виразі тяжко розібратися, але може найдеться людина яка підкаже мені помилку. дякую!

4

Re: Проблема з регулярними виразами

А, якщо так, то він матюкається на \s і \w

Подякували: Bac9IH1

5

Re: Проблема з регулярними виразами

і як тоді з ними? \s - це пробел, \w - це всі символи від a-zA-Z_0-9.
до речі попробував ше декілька простих задачок:
Pattern p2 = Pattern.compile("\Breg.*");
        Matcher m2 = p2.matcher(Java now has regular expressions);

знову не подобається сам регулярний вираз, я та розумію він не сприймає зворотнього слешу "\", ну але ж \B - це привязка до границі, що означає: не границя слова.

поробував слідуючий вираз: "n.w\s+h(a|i)s" - також вибиває помилку. Видно я роблю одну і туж помилку всюди, але не бачу її.

6 Востаннє редагувалося koala (28.09.2015 19:51:29)

Re: Проблема з регулярними виразами

Патерн, що ви його заносите в Pattern.compile - це рядок. Рядки в Java використовують той самий символ для екранування, що й регулярки (\ -зворотній дріб, бекслеш). Тому якщо вам треба в регулярці набрати \w, ви маєте написати "\\w"

Подякували: Bac9IH, leofun012

7 Востаннє редагувалося Bac9IH (28.09.2015 20:01:57)

Re: Проблема з регулярними виразами

супер, все підходить, помилки більше немає, але є одне але, в цьому прикладі:
Pattern p2 = Pattern.compile("\\Breg.*");
        Matcher m2 = p2.matcher(Java now has regular expressions);
               System.out.println(m2.matches());
мав би вивести true, а пише false? чи я неправий, має бути false?

8

Re: Проблема з регулярними виразами

Bac9IH написав:

супер, все підходить, помилки більше немає, але є одне але, в цьому прикладі:
Pattern p2 = Pattern.compile("\\Breg.*");
        Matcher m2 = p2.matcher(Java now has regular expressions);
               System.out.println(m2.matches());
мав би вивести true, а пише false? чи я неправий, має бути false?

А, що таке Java now has regular expressions? Якщо String, то не вистачаэ лапок, але всерівно поверне false