2015-02-17 3 views
0

Я пытаюсь использовать регулярные выражения для проверки ввода пользователем по мере их ввода. Например, если бы я хотел проверить строку «Hello», и пользовательский ввод был «H», «He», ..., «Hello» «Hello world» и т. Д., Это было бы верно, но «Hi», H e "и т. Д. Не будет.Как совместить регулярное выражение до конца строки?

настоящее время я использую:

if let range = s.rangeOfString("^\\s*Hello", options: .RegularExpressionSearch){ 
    //Valid 
} 

Но это не принимает «H», «Он» и т.д. Есть ли способ сделать это с помощью регулярных выражений?

+0

необходимо добавить все альтернативы. –

+0

Так что-то вроде «^ \\ s * H | He | Hel | Hell | Hello» вы имеете в виду? – BenJacob

+0

Да, вот так. Но также используйте границы слов. –

ответ

1

Вам необходимо добавить все альтернативы, как показано ниже.

^\\s*H(?:ello|el?l?)?\\b 

Обратите внимание, что ? повторяет предыдущий маркер ноль или 1 раз. Не учитывайте, что ? присутствует внутри поисковых запросов (?<=..), (?=..) или группа, не участвующая в съемке (?:..). | называется оператором чередования. Сначала он будет использовать узор слева от него. Если этот шаблон найдет совпадение, он не коснется шаблона, который присутствовал на его правой стороне. Итак, H(?:ello)\\b соответствует Hello и He соответствует He, так как мы сделали l подарком во 2-м патче как дополнительно. Аналогично это продолжается. ? после того, как группа, не связанная с захватом, сделает всю группу дополнительной. Итак, теперь мы получаем шаблон, такой как ^\\s*H\\b, теперь это соответствует одному H.

+0

Это отлично работает! Не могли бы вы немного объяснить, как работает деталь в скобке? – BenJacob

+0

Отлично, большое вам спасибо – BenJacob

Смежные вопросы