【问题标题】:Matching stand-alone substrings in Swift在 Swift 中匹配独立的子字符串
【发布时间】:2015-01-29 11:13:33
【问题描述】:
我想检查一个字符串是否是另一个字符串的一部分,但只是作为一个独立的术语,而不是另一个单词的一部分。我在 Swift 中工作。
例如这是我希望检查 "mon"
的内容
- “星期一”真
- “周一”真
- “星期一”真
- “星期一”真
- “星期一”假
- “怪物”假
- “荷尔蒙”错误
有什么好的方法可以做到这一点? (在 containsString 和正则表达式等 NSString 函数之间来回切换)
【问题讨论】:
标签:
ios
regex
string
swift
nsstring
【解决方案1】:
使用带有不区分大小写修饰符的单词边界。
"(?i)\\bmon\\b"
DEMO
【解决方案2】:
let regex = NSRegularExpression(pattern: "\\bmon\\b", options: NSRegularExpressionOptions.CaseInsensitive, error: nil)!
func isMatch(str: String) -> Bool {
return regex.firstMatchInString(str, options: nil, range: NSRange(location: 0, length: str.utf16Count)) != Optional.None
}
["Mon", "mon", " Mon", " Mon " , "Monday", "Monster", "Hormons"].map(isMatch)
// yields [true, true, true, true, false, false, false]
【解决方案3】:
以下适用于 Swift 2。
let regex = try! NSRegularExpression(pattern: "\\bmon\\b", options: NSRegularExpressionOptions.CaseInsensitive)
func isMatch(str: String) -> Bool {
return regex.firstMatchInString(str, options: .ReportCompletion , range: NSRange(location: 0, length: str.characters.count)) != Optional.None
}
["Mon", "mon", " Mon", " Mon " , "Monday", "Hormons"].map(isMatch)
// Yields [true, true, true, true, false, false]