Частичное сопоставление строки с регулярным выражением в swift

#ios #swift #regex

#iOS #swift #регулярное выражение

Вопрос:

Я пытаюсь создать регулярное выражение с форматом «dd-dd-dd» в Swift

Я придумал это :

 (d{1,2})(-)(d{1,2})(-)(d{1,2})
 

Этот шаблон дает мне правильный результат, если строка задана целиком. Пример :

 12-32-42 -> correct
2-32-1   -> correct
2--32-3  -> incorrect
 

Я буду использовать этот шаблон в текстовых полях.
Что я хотел бы знать, так это то, движется ли введенная строка к положительной проверке регулярных выражений. Пример :

 12     -> correct
-12-32 -> correct
12-    -> correct
-12--  -> incorrect
 

Я буду благодарен за любую помощь, которую вы можете предоставить.

Комментарии:

1. Только одно тире между числами является правильным.

2. Почему это -12-32 правильно? Это начинается с - . Я бы посоветовал let pattern = "^\d{1,2}(?:-(?:\d{1,2}(?:-\d{0,2})?)?)?$" , см. regex101.com/r/eHHG2l/1 .

Ответ №1:

Одним из вариантов может быть перечисление возможных комбинаций в чередовании:

 ^(?:d{1,2}-d{1,2}-d{1,2}|d{1,2}-|-d{1,2}-d{1,2}|d{1,2})$
 

Демонстрация регулярных выражений

Комментарии:

1. Может быть, не идеально, но это работает, и это именно то, что я хотел. Спасибо!