Введение
Метасимвол ? — полезный инструмент в регулярных выражениях. Как и +, он позволяет находить дополнительный текст, включая нулевое количество совпадений. Однако, в отличие от +, ? ограничивает совпадение нулевым или единичным количеством символов или набора символов.
Применение метасимвола ?
Метасимвол ? идеален для поиска конкретных дополнительных символов. Рассмотрим пример с URL:
Текст:
Для связи с президентом http://kremlin.ru/, для безопасного соединения используйте https://kremlin.ru/.
Регулярное выражение:
http:\/\/[\w.\/]+
Результат:
Для связи с президентом http://kremlin.ru/, для безопасного соединения используйте https://kremlin.ru/. Анализ: Шаблон http:\/\/[\w.\/]+ находит только первый URL с префиксом http://, но не https://, так как не учитывает букву s.
Исправление с использованием ?
Для учёта варианта с s используем ?:
Текст:
Для связи с президентом http://kremlin.ru/, для безопасного соединения используйте https://kremlin.ru/.
Регулярное выражение:
https?:\/\/[\w.\/]+
Результат:
Для связи с президентом http://kremlin.ru/, для безопасного соединения используйте https://kremlin.ru/. Анализ: Шаблон https?:\/\/ допускает как http://, так и https://, ограничивая s одним или нулевым вхождением.
Пример с концом строки
Метасимвол ? решает проблему конца строки:
Текст:
"101","Van","Damme"
"102","Dolph","Lundgren"
"103","Sylvester","Stallone"
"104","Arnold","Schwarzenegger"
Регулярное выражение:
[\r]?\n
Результат:
"101","Van","Damme"\n
"102","Dolph","Lundgren"\n
"103","Sylvester","Stallone"\n
"104","Arnold","Schwarzenegger" Анализ: Шаблон [\r]?\n учитывает необязательный \r и обязательный \n для совместимости с разными платформами.
Совет
Используйте [\r]? вместо \r? для ясности. Метасимвол ? должен стоять за пределами набора, например, http[s]?: верно, а http[s?]: — нет.
Заключение
Метасимвол ? обеспечивает точное управление совпадениями с нулевым или единичным количеством символов.
Отзывы