如何将正则表达式匹配到字符串末尾?

How to match regular expression up to end of string?

我正在尝试使用正则表达式来检查用户输入的内容。例如,如果我想检查字符串 "Hello",而用户输入是 "H"、"He"、...、"Hello" "Hello world" 等。将有效,但 "Hi"、"H e" 等无效。

我目前正在使用:

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

但这不接受"H"、"He"等。有没有办法使用正则表达式来做到这一点?

您需要添加如下所示的所有备选方案。

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

请注意 ? 将前一个标记重复零次或 1 次。不要考虑 ? 出现在环视 (?<=..)(?=..) 或非捕获组 (?:..) 中。 | 称为交替运算符。它将首先使用左侧的图案。如果此模式找到匹配项,则它不会触及出现在其右侧的模式。所以 H(?:ello)\b 匹配 HelloHe 匹配 He,因为我们将第二个模式中的 l 设置为可选。同样,它还在继续。 ? 后非捕获组将整个组作为可选组。所以现在我们得到一个像 ^\s*H\b 这样的模式,现在它匹配一个 H.