Regex 库最初是为了满足 Swift Express 的需求而引入的,Swift Express 是用于 Swift 的 Web 应用程序服务器端框架。
我们仍然希望它对其他人也有用。
=~
运算符支持switch
运算符)支持Path to Regex 转换器可在此处作为单独的库使用:PathToRegex
它允许使用诸如 /folder/*/:file.txt
或 /route/:one/:two
之类的路径模式转换为正则表达式并与字符串进行匹配。
将以下依赖项添加到您的 Package.swift
.Package(url: "https://github.com/crossroadlabs/Regex.git", majorVersion: 1)
运行 swift build
并构建您的应用程序。
将以下内容添加到您的 Podfile
pod 'CrossroadRegex'
确保您正在使用框架集成您的依赖项:将 use_frameworks!
添加到您的 Podfile。 然后运行 pod install
。
将以下内容添加到您的 Cartfile
github "crossroadlabs/Regex"
运行 carthage update
并按照 Carthage 的 README 中描述的步骤操作。
/Regex
文件夹放入您的项目中。以下所有行都是相同的,并表示简单的匹配。 所有运算符和 matches
函数都返回 Bool
//operator way, can match either regex or string containing pattern
"l321321alala" =~ "(.+?)([123]*)(.*)".r
"l321321alala" =~ "(.+?)([123]*)(.*)"
//similar function
"(.+?)([123]*)(.*)".r!.matches("l321321alala")
如果表达式不匹配,运算符 !~
返回 true
"l321321alala" !~ "(.+?)([123]*)(.*)".r
"l321321alala" !~ "(.+?)([123]*)(.*)"
//both return false
Regex 提供了与 Swift 的深度集成,可以以下列方式与 switch 关键字一起使用
let letter = "a"
let digit = "1"
let other = "!"
//you just put your string is a regular Swift's switch to match to regular expressions
switch letter {
//note .r after the string literal of the pattern
case "\\d".r: print("digit")
case "[a-z]".r: print("letter")
default: print("bizarre symbol")
}
switch digit {
case "\\d".r: print("digit")
case "[a-z]".r: print("letter")
default: print("bizarre symbol")
}
switch other {
//note .r after the string literal of the pattern
case "\\d".r: print("digit")
case "[a-z]".r: print("letter")
default: print("bizarre symbol")
}
以上代码的输出将是
letter
digit
bizarre symbol
// strings can be converted to regex in Scala style .r property of a string
let digits = "(.+?)([123]*)(.*)".r?.findFirst(in: "l321321alala")?.group(at: 2)
// digits is "321321" here
let regex:RegexType = try Regex(pattern:"(.+?)([123]*)(.*)",
groupNames:"letter", "digits", "rest")
let match = regex.findFirst(in: "l321321alala")
if let match = match {
let letter = match.group(named: "letter")
let digits = match.group(named: "digits")
let rest = match.group(named: "rest")
//do something with extracted data
}
let replaced = "(.+?)([123]*)(.*)".r?.replaceAll(in: "l321321alala", with: "$1-$2-$3")
//replaced is "l-321321-alala"
let replaced = "(.+?)([123]+)(.+?)".r?.replaceAll(in: "l321321la321a") { match in
if match.group(at: 1) == "l" {
return nil
} else {
return match.matched.uppercaseString
}
}
//replaced is "l321321lA321A"
在以下示例中,split() 查找 0 个或多个空格,后跟一个分号,后跟 0 个或多个空格,并在找到时从字符串中删除空格。 nameList 是作为 split() 结果返回的数组。
let names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand"
let nameList = names.split(using: "\\s*;\\s*".r)
//name list contains ["Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand"]
如果分隔符包含捕获括号,则匹配结果将返回到数组中。
let myString = "Hello 1 word. Sentence number 2."
let splits = myString.split(using: "(\\d)".r)
//splits contains ["Hello ", "1", " word. Sentence number ", "2", "."]
要开始,请签署贡献者许可协议。