我正在尝试使用正则表达式在键入时检查用户输入。例如,如果我想检查字符串“Hello”,并且用户输入是“H”,“He”,...,“Hello”“Hello world”等,它将是有效的但是“Hi”,“ “等等不会。
我目前正在使用:
if let range = s.rangeOfString("^\\s*Hello", options: .RegularExpressionSearch){
//Valid
}
但这不接受“H”,“他”等。有没有办法用正则表达式做到这一点?
答案 0 :(得分:1)
您需要添加以下所有替代方案。
^\\s*H(?:ello|el?l?)?\\b
请注意?
重复前一个令牌零或一次。不要考虑?
,(?<=..)
或非捕获组(?=..)
中的(?:..)
内容。 |
称为交替运算符。它将首先使用左侧的图案。如果此模式找到匹配,那么它将不会触及存在于其右侧的模式。因此,H(?:ello)\\b
匹配Hello
和He
匹配He
,因为我们将第二个模式中的l
作为可选项。同样,它继续下去。非捕获组之后的?
将使整个组成为可选组。现在我们得到一个类似^\\s*H\\b
的模式,现在这匹配一个H
。