测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | Apache 2 |
发布最新发布 | 2017年12月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✓ |
由 Daniel Leping 维护。

Regex 库主要引入是为了满足 Swift Express 的需求 - 一个为 Swift 服务的 Web 应用服务器端框架。
但我们仍然希望它对每个人都是有用的。
=~
操作符switch
操作符)Regex 转化器路径作为单独的库在这里可用: PathToRegex
这个允许使用路径模式如 /folder/*/:file.txt
或 /route/:one/:two
来转换为正则表达式,并匹配字符串。
将以下依赖项添加到您的 Package.swift
.Package(url: "https://github.com/crossroadlabs/Regex.git", majorVersion: 0)
运行 swift build
并构建您的应用程序。包管理器支持 OS X,但建议仅在 Linux 上使用。
/Regex
文件夹下载并拖放到您的项目中。下面的所有行都相同,代表简单的匹配。所有操作符和 matches
函数返回布尔值
//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
switch
关键字)正则表达式与 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", "."]
您可以在以下位置查看CHANGELOG 作为单独的文档此处。
要开始,请签署捐赠者许可协议。