Swift正则表达式:字符串匹配模式吗?

时间:2015-04-21 22:40:14

标签: ios regex string swift

在Swift中,查看字符串是否与模式匹配的简单方法是什么?

伪代码示例:

if string matches pattern ...

if string =~ pattern ...

(我已经阅读过Swift文档并且还没有看到正则表达式的功能。我已经阅读了有关添加新=~运算符的内容,这是一个好主意但比我想要的更复杂,因为这是为了一个教学项目。我试过rangeOfString但得到错误:'String'没有成员'rangeOfString'。我正在寻找一个Swift解决方案,即不输入NSRegularExpression。我不需要做任何事情匹配结果数据。)

5 个答案:

答案 0 :(得分:62)

Swift版本3解决方案:

if string.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil ...

Swift版本2解决方案:

if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ...

示例 - 此字符串是否包含两个字母“o”字符?

"hello world".rangeOfString("o.*o", options: .RegularExpressionSearch) != nil

注意:如果收到错误消息'String' does not have a member 'rangeOfString',请在之前添加:import Foundation。这是因为  Foundation提供了自动桥接到Swift String类的NSString方法。

import Foundation

感谢Onno Eberhard对Swift 3的更新。

答案 1 :(得分:20)

上面提到的解决方案对我不起作用,所以我在这里发布我的解决方案(我使用String的扩展名):

extension String {
    func matches(_ regex: String) -> Bool {
        return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
    }
}

示例:

if str.matches("^[a-zA-Z0-9._-]{1,30}$") {
    //...
}

答案 2 :(得分:12)

要获得您实际询问的语法,您可以轻松定义一个包含桥接NSString功能的新运算符:

infix operator =~ {}
func =~(string:String, regex:String) -> Bool {
    return string.rangeOfString(regex, options: .RegularExpressionSearch) != nil
}

"abcd" =~ "ab*cd"
"abcd" =~ "abcde+"

答案 3 :(得分:-1)

Swift 4.2 中,即使字符串与模式不匹配,以下内容也不返回nil:

uxStudentFormActive_ItemDataBound

如Xcode所建议:

  

比较类型'NSRange'(也称为'_NSRange')的非可选值和nil   总是返回true

因此,我最终使用的是:

string.range(of: regex, options: .regularExpression, range: nil, locale: nil)

答案 4 :(得分:-2)

这将返回字符串是否与模式匹配

例如。 matchesPattern(text:“sd56Yz”,pattern:“[a-zA-Z0-9] +”)true

例如。 matchesPattern(text:“sd56 $ Yz”,pattern:“[a-zA-Z0-9] +”)false

top: 0;
相关问题