Регулярное выражение, соответствующее «словарным словам» - PullRequest
2 голосов
/ 13 октября 2011

Я пользователь Java, но я новичок в регулярных выражениях.

Я просто хочу иметь крошечное выражение, которое, учитывая слово (мы предполагаем, что строка - только одно слово), отвечаетс логическим значением, говорящим, является ли слово действительным или нет.

Пример ... Я хочу поймать все слова, которые могут быть в словаре ... Итак, я просто хочу слова с символами изaz AZ, дефис (например, «человек посередине») и апостроф (как я или Тиффани).

Допустимые слова:

  • "food"
  • "RocKet"
  • "man-in-the-middle"
  • "kahsdkjhsakdhakjsd"
  • "JESUS" и т. Д.

Недопустимые слова:

  • "gipsy76"
  • "www.google.com"
  • "me@gmail.com"
  • "745474"
  • "+-x/" и т. д.

Я использую этот код, но он не даст правильного ответа:

Pattern p = Pattern.compile("[A-Za-z&-&']");
Matcher m = p.matcher(s);
System.out.println(m.matches());

Что не так с моим регулярным выражением?

Ответы [ 5 ]

4 голосов
/ 13 октября 2011
  • Добавьте + после выражения, чтобы сказать «один или несколько из этих символов»:
  • Избегайте дефиса с помощью \ (или поместите его последним).
  • Удалите эти & символы:

Вот код:

Pattern p = Pattern.compile("[A-Za-z'-]+");
Matcher m = p.matcher(s);
System.out.println(m.matches());

Полный тест:

String[] ok = {"food","RocKet","man-in-the-middle","kahsdkjhsakdhakjsd","JESUS"};
String[] notOk = {"gipsy76", "www.google.com", "me@gmail.com", "745474","+-x/" };

Pattern p = Pattern.compile("[A-Za-z'-]+");

for (String shouldMatch : ok)
    if (!p.matcher(shouldMatch).matches())
        System.out.println("Error on: " + shouldMatch);

for (String shouldNotMatch : notOk)
    if (p.matcher(shouldNotMatch).matches())
        System.out.println("Error on: " + shouldNotMatch);

(не выводит).

1 голос
/ 13 октября 2011

Это должно работать:

"[A-Za-z'-]+"

0 голосов
/ 13 апреля 2017

Regex - / ^ ([a-zA-Z] * ('| -)? [A-zA-Z] +) * /

Вы можете использовать выше регулярное выражениеесли вы не хотите последовательно "или" - ".Это даст вам точное соответствие вашего текста.Он принимает человека в середине asd'asdasd'asd

Он отклоняет следующую строку человек в середине asdasd''asd

0 голосов
/ 11 мая 2014

Но "-word" и "word-" недопустимы. Таким образом, вы можете использовать этот шаблон:

WORD_EXP = "^[A-Za-z]+(-[A-Za-z]+)*$"
0 голосов
/ 13 октября 2011

Привет Aloob, пожалуйста, проверьте это, немного длиннее, возможно, есть более короткая версия этого, Все еще ...

[A-z]*||[[A-z]*[-]*]*||[[A-z]*[-]*[']*]*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...