Regex: знак вопроса и двоеточие
У меня есть следующее регулярное выражение Java, которое я не писал, и я пытаюсь изменить:
^class-map(?:(\\s+match-all)|(\\s+match-any))?(\\s+[\\x21-\\x7e]{1,40})$ ^ ^
Это похоже на это .
Обратите внимание на первый знак вопроса. Означает ли это, что группа не является обязательной? После соответствующего знака уже есть знак вопроса )
. Имеет ли двоеточие особое значение в регулярном выражении?
- Как разбить String на некоторый разделитель, но не удаляя этот разделитель в Java?
- jQuery validate: Как добавить правило для проверки правильности выражения?
- Автоматически добавлять комментарии к файлам PDF с регулярными выражениями
- Как заменить регулярное выражение в MySQL?
- Шаблон Java Regex, который соответствует любому онлайн-тестеру, но не в Eclipse
Регулярное компиляция отлично, и уже есть тесты JUnit, которые показывают, как это работает. Просто я немного смущен тем, почему есть первый вопросительный знак и двоеточие.
- Регулярное выражение для пароля должно содержать не менее восьми символов, как минимум одно число и буквы нижнего и верхнего регистра и специальные символы
- Как обрабатывать специальные символы в регулярном выражении Perl?
- MySQL SELECT LIKE или REGEXP для сопоставления нескольких слов в одной записи
- (grep) Regex для соответствия символам, отличным от ASCII?
- C # Regex Split - запятые вне кавычек
- Идентификатор частного IP-адреса в регулярном выражении
- Регулярное выражение для разделения строки с использованием пробела, если оно не окружено одинарными или двойными кавычками
- Удаление пустых строк в Notepad ++
(?:
запускает группу, не связанную с захватом). Это ничем не отличается от (
если вы не извлекаете группы из регулярного выражения после использования. См. Что представляет собой группа, не захватывающая захват? Что означает знак вопроса, за которым следует двоеточие (? 🙂 означает .
Немного поздно в эту ветку – только для того, чтобы опираться на ответ Рьянпа.
Предполагая, что у вас есть строка aaabbbccc
Регулярное выражение
(a)+(b)+(c)+
Это даст вам следующие 3 группы, которые соответствуют:
['a', 'b', 'c']
Регулярное выражение с не захватывающей скобкой
Использовать ?:
В первой группе
(?:a)+(b)+(c)+
и вы получите следующие группы, которые соответствуют:
['b', 'c']
Следовательно, почему это называется « не захватывающей скобкой»,
Пример использования:
Иногда вы используете скобки для других вещей. Например, чтобы установить границы |
или оператора:
"New (York|Jersey)"
В этом случае вы используете только скобки для или |
переключатель, и вы действительно не хотите захватывать эти данные. Используйте не захватывающие скобки, чтобы указать, что:
"New (?:York|Jersey)"