iOS-正则表达式匹配单词边界,包括下划线

iOS-正则表达式匹配单词边界,包括下划线,ios,regex,swift,Ios,Regex,Swift,我有一个正则表达式,我正试图运行它来匹配各种搜索词。例如: 搜索结果应匹配: ->年老 ->老年 但不是 ->粗体-因为它不在单词的开头 为此,我使用了单词边界。但是,单词边界不考虑下划线。如前所述,还有其他语言的变通方法。不幸的是,对于NSRegularExpression,这看起来不可能。有没有其他办法让单词边界起作用?还是其他选项?快速、客观的C支持。这种风格支持固定和受限宽度的外观 ?=。。。前瞻性断言。如果括号中的模式在当前输入位置匹配,但不推进输入位置,则为True 。。。消极的前瞻

我有一个正则表达式,我正试图运行它来匹配各种搜索词。例如:

搜索结果应匹配: ->年老 ->老年 但不是 ->粗体-因为它不在单词的开头


为此,我使用了单词边界。但是,单词边界不考虑下划线。如前所述,还有其他语言的变通方法。不幸的是,对于NSRegularExpression,这看起来不可能。有没有其他办法让单词边界起作用?还是其他选项?

快速、客观的C支持。这种风格支持固定和受限宽度的外观

?=。。。前瞻性断言。如果括号中的模式在当前输入位置匹配,但不推进输入位置,则为True

。。。消极的前瞻断言。如果括号中的图案在当前输入位置不匹配,则为True。不推进输入位置

?断言后的负面观察

所以,你可以使用

 let regex = "(?<![\\p{L}\\d])old(?![\\p{L}\\d])";

下面是一个提取所有旧版本的示例:

func matchesForRegexInText(regex: String, text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex, options: [])
        let nsString = text as NSString
        let results = regex.matchesInString(text,
            options: [], range: NSMakeRange(0, nsString.length))
        return results.map { nsString.substringWithRange($0.range)}
    } catch let error as NSError {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

let s = "age_old -> old_age but not -> bold"
let rx = "(?<![\\p{L}\\d])old(?![\\p{L}\\d])"
let matches = matchesForRegexInText(rx, text: s)
print(matches) // => ["old", "old"]

为什么不可能?使用在开始和结束的时候?![\\p{L}\\d]在模式的末尾。你所说的单词的开头是什么意思?正如我的例子中所示,old应该与粗体匹配。但是它应该和旧的相匹配,比如说,1old,old,*old,old,oldenthanks,这看起来很有效。我现在正在测试它,所以这绝对适用于NSRegularExpression。我试图在coredata中使用matches%@谓词来运行它,但它似乎没有返回值。在一些测试之后,似乎匹配范围必须返回要从核心数据返回的整个字符串。在给定相同条件的情况下,知道如何将匹配扩展到整个字符串吗?在模式的开头添加^.*并在结尾添加.*$,然后使用.DotMatchesLineSeparator选项允许。以匹配任何现有字符。