regex - 确保正则表达式与 Swift 正则表达式匹配整个字符串

标签 regex swift

如何检查整个字符串是否可以与正则表达式匹配?在 Java 中是方法 String.matches(regex)

最佳答案

您需要使用 anchor ,^(字符串 anchor 的开始)和 $(字符串 anchor 的结尾),通过 range(of:options:range:locale:),传递 .regularExpression选项:

import Foundation

let phoneNumber = "123-456-789"
let result = phoneNumber.range(of: "^\\d{3}-\\d{3}-\\d{3}$", options: .regularExpression) != nil
print(result)

或者,您可以传递一个选项数组,[.regularExpression, .anchored],其中 .anchored 只会将模式锚定在字符串的开头,并且您可以省略 ^,但仍然需要 $ 锚定在字符串末尾:

let result = phoneNumber.range(of: "\\d{3}-\\d{3}-\\d{3}$", options: [.regularExpression, .anchored]) != nil

查看 online Swift demo

另外,在这里使用带有 MATCHESNSPredicate 是一个替代方案:

The left hand expression equals the right hand expression using a regex-style comparison according to ICU v3 (for more details see the ICU User Guide for Regular Expressions).

MATCHES 实际上将正则表达式匹配锚定在字符串的开头和结尾(请注意,这可能不适用于所有 Swift 3 构建 ):

let pattern = "\\d{3}-\\d{3}-\\d{3}"
let predicate = NSPredicate(format: "self MATCHES [c] %@", pattern)
let result = predicate.evaluate(with: "123-456-789") 

关于regex - 确保正则表达式与 Swift 正则表达式匹配整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43676144/

相关文章:

swift - 在 App Delegate (tvOS) 中引用 AVAudioPlayer

ios - 单击并拖动 CGContext 绘图以将其放置在屏幕上的任意位置

python - 裁剪出字符串的一部分并使用正则表达式打印

java - 正则表达式排除 [ 除非前面有\

ios - 在 Swift 中设置 UITableView 编辑

ios - 无法使用 Facebook SDK 登录

ios - 即使应用程序被杀死/终止,位置更新

JavaScript 日期模式

c++ - g++ 正则表达式头文件

python - 使用正则表达式获取标签后的第二个 div