正则表达式在 swift 中不起作用

regex does not work in swift

我正在使用正则表达式查找字符串中出现的所有 \n 次。

正则表达式本身有效:

表达式找到 \n 但找不到 \n。也就是我想要的。

但是,当我想在 Swift 中为 iOS 应用程序实现此功能时,我收到错误消息:invalid regex: The value „(?<!\)\n“ is invalid.

我的代码看起来像这样(在实施 \ 评论中的方法后:

import UIKit

var str = "Hello, \n \n playground"

let regex = try? NSRegularExpression(pattern: "(?<!\\)\n", options: .caseInsensitive)

let matches = regex?.matches(in: str, options: .anchored, range: NSMakeRange(0, str.count))

print(matches)

matches 为零。它应该找到 \n.

正则表达式是使用 .anchored 选项编译的,该选项要求模式仅在字符串的开头匹配:

Specifies that matches are limited to those at the start of the search range.

您需要删除此选项,例如

let matches = regex?.matches(in: str, options: [], range: NSMakeRange(0, str.count))

请注意,"(?<!\\)\n" 字符串文字定义了一个 (?<!\)\n 匹配

的正则表达式模式
  • (?<!\) - 字符串中不紧跟 \ char
  • 的位置
  • \n - 一个换行符,LF.

参见regex demo online