joe*_*son 30 regex string ios swift
在Swift中,查看字符串是否与模式匹配的简单方法是什么?
伪代码示例:
if string matches pattern ...
if string =~ pattern ...
Run Code Online (Sandbox Code Playgroud)
(我已经阅读过Swift文档并且还没有看到正则表达式的功能.我已经阅读过添加一个新的=~
运算符,这是一个好主意但比我想要的更复杂,因为这是一个教学项目.我试过rangeOfString
但是得到错误:'String'没有成员'rangeOfString'.我正在寻找一个Swift解决方案,即不输入NSRegularExpression.我不需要对匹配结果数据做任何事情.)
joe*_*son 68
Swift版本3解决方案:
if string.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil ...
Run Code Online (Sandbox Code Playgroud)
Swift版本2解决方案:
if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ...
Run Code Online (Sandbox Code Playgroud)
示例 - 此字符串是否包含两个字母"o"字符?
"hello world".rangeOfString("o.*o", options: .RegularExpressionSearch) != nil
Run Code Online (Sandbox Code Playgroud)
注意:如果您收到错误信息'String' does not have a member 'rangeOfString'
,然后才补充一点:import Foundation
.这是因为Foundation提供了自动桥接到Swift String类的NSString方法.
import Foundation
Run Code Online (Sandbox Code Playgroud)
感谢Onno Eberhard为Swift 3更新.
Onn*_*ard 24
上面提到的解决方案对我不起作用,所以我在这里发布我的解决方案(我使用String的扩展名):
extension String {
func matches(_ regex: String) -> Bool {
return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
}
}
Run Code Online (Sandbox Code Playgroud)
例:
if str.matches("^[a-zA-Z0-9._-]{1,30}$") {
//...
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*rry 12
要获得您实际询问的语法,您可以轻松定义包含桥接NSString
功能的新运算符:
infix operator =~ {}
func =~(string:String, regex:String) -> Bool {
return string.rangeOfString(regex, options: .RegularExpressionSearch) != nil
}
"abcd" =~ "ab*cd"
"abcd" =~ "abcde+"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33431 次 |
最近记录: |