Regex: знак вопроса и двоеточие

У меня есть следующее регулярное выражение Java, которое я не писал, и я пытаюсь изменить:

^class-map(?:(\\s+match-all)|(\\s+match-any))?(\\s+[\\x21-\\x7e]{1,40})$ ^ ^ 

Это похоже на это .

Обратите внимание на первый знак вопроса. Означает ли это, что группа не является обязательной? После соответствующего знака уже есть знак вопроса ) . Имеет ли двоеточие особое значение в регулярном выражении?

Регулярное компиляция отлично, и уже есть тесты JUnit, которые показывают, как это работает. Просто я немного смущен тем, почему есть первый вопросительный знак и двоеточие.

(?: запускает группу, не связанную с захватом). Это ничем не отличается от ( если вы не извлекаете группы из регулярного выражения после использования. См. Что представляет собой группа, не захватывающая захват? Что означает знак вопроса, за которым следует двоеточие (? 🙂 означает .

Немного поздно в эту ветку – только для того, чтобы опираться на ответ Рьянпа.

Предполагая, что у вас есть строка aaabbbccc

Регулярное выражение

 (a)+(b)+(c)+ 

Это даст вам следующие 3 группы, которые соответствуют:

 ['a', 'b', 'c'] 

Регулярное выражение с не захватывающей скобкой

Использовать ?: В первой группе

 (?:a)+(b)+(c)+ 

и вы получите следующие группы, которые соответствуют:

 ['b', 'c'] 

Следовательно, почему это называется « не захватывающей скобкой»,

Пример использования:

Иногда вы используете скобки для других вещей. Например, чтобы установить границы | или оператора:

 "New (York|Jersey)" 

В этом случае вы используете только скобки для или | переключатель, и вы действительно не хотите захватывать эти данные. Используйте не захватывающие скобки, чтобы указать, что:

 "New (?:York|Jersey)" 
  • Оператор регулярного выражения Java OR
  • заменить неизвестную строку между двумя известными строками с помощью sed
  • Заменить символы с помощью gsub, как создать функцию?
  • Найти и убить процесс в одной строке с помощью bash и regex
  • Есть ли команда linux, например mv, но с регулярным выражением?
  • Использование регулярных выражений для анализа HTML: почему бы и нет?
  • C # regex pattern для извлечения URL-адресов из заданной строки - не полный URL-адрес html, но также и ссылки
  • Regex заменить все \ n на String, но не те внутри тега
  • Regex: что такое InCombiningDiacriticalMarks?
  • Regex, созданный с помощью нового RegExp (myString), не работает (обратная косая черта)
  • Регулярные выражения и GWT
  • Давайте будем гением компьютера.