如何将正则表达式匹配到字符串末尾?
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
匹配 Hello
而 He
匹配 He
,因为我们将第二个模式中的 l
设置为可选。同样,它还在继续。 ?
后非捕获组将整个组作为可选组。所以现在我们得到一个像 ^\s*H\b
这样的模式,现在它匹配一个 H
.
我正在尝试使用正则表达式来检查用户输入的内容。例如,如果我想检查字符串 "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
匹配 Hello
而 He
匹配 He
,因为我们将第二个模式中的 l
设置为可选。同样,它还在继续。 ?
后非捕获组将整个组作为可选组。所以现在我们得到一个像 ^\s*H\b
这样的模式,现在它匹配一个 H
.