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)" 
  • Как получить текст между вложенными круглыми скобками?
  • Закаленный жадный токен - что отличает размещение точки до негативного взгляда
  • Что такое регулярное выражение для «Любое положительное целое число, исключая 0»,
  • isnumeric () с PostgreSQL
  • Как вы сопоставляете только действительные римские цифры с регулярным выражением?
  • Vim удалить все строки, которые НЕ содержат определенное слово
  • Идентификатор частного IP-адреса в регулярном выражении
  • удаление недопустимых символов XML из строки в java
  • R dplyr: переименование переменных с использованием строковых функций
  • Regex: что такое InCombiningDiacriticalMarks?
  • Как сделать регулярное выражение для нескольких строк в Notepad ++?
  • Interesting Posts

    Реализация streamового буферного буфера

    Отправка и получение данных по сети с использованием TcpClient

    Какое программное обеспечение следует использовать для шифрования моего жесткого диска?

    В чем разница между процессом и streamом?

    onActivityResult С launchMode = “singleTask”?

    Не удалось получить название продуктов с веб-страницы, зашифрованной в javascript

    Есть ли у JavaScript метод, подобный «range ()» для создания диапазона в пределах предоставленных границ?

    PhoneGap Android: как заставить приложение использовать значки из папки ресурсов \ www \ res вместо res \ drawable?

    Как невозможно «расшифровать» hash MD5?

    У Google Chrome нет автоматической синхронизации закладки, когда пользователь нажимает CTRL-D?

    Предотrotation расширения содержимого элементов сетки

    Как я могу физически уничтожить данные с отказавшего жесткого диска?

    Как остановить автоматическое закрытие приложений C #?

    Пиковое обнаружение измеренного сигнала

    Стеганография при сжатии с потерей (JAVA)

    Давайте будем гением компьютера.