正则表达式在 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.
我正在使用正则表达式查找字符串中出现的所有 \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.