Java регулярное выражение в строке несколько раз - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть Java-программа, которая должна соответствовать строке, если она содержит дефис более 5 раз:

hello-hi-contains-more-than-five-hyphen

Слова могут содержать любые обычные символы.

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

hi-hello-233-here-example

Я пытался написать регулярное выражение так:

.*-{6,}.*

Но это не работает.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018
"...".matches("(?s)([^-]*-){6}.*")
  • (?s) точка-все, . также будет соответствовать разделителям строк, таким как \r и n.
  • group ( ), 6 раз {6},любой символ . 0 или более раз *
  • группа с набором символов [] не ^, содержащий -, 0 или более раз *, за которым следует-

Для matches регулярное выражение должно охватывать всю строку, поэтому ^ (начало) и $ (конец) уже подразумеваются.(Отсюда и необходимость .*)

0 голосов
/ 11 декабря 2018

Нет необходимости в дорогих регулярных выражениях здесь, простые split и length сделают это, то есть:

String subjectString = "hello-hi-contains-more-than-five-hyphen";
String[] splitArray = subjectString.split("-");
if(splitArray.length > 5){
    System.out.println(subjectString);
}

Java Demo

0 голосов
/ 11 декабря 2018

Если вы хотите использовать Regex, вы можете попробовать следующее:

^(.*?-){6,}.*$

Live Example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...