ios - 如何修改包含 '-'作为单词字符的单词边界

标签 ios regex swift

我想获取长度介于 6 到 8 位之间的密码。

我想匹配: 123-456712-34-56-78

失败: 1234567890123-456-7890

目前我正在使用 (\\b(?:\\d[-,\\h]?+){5,7}\\d\\b) 这成功击退了 1234567890,但在 123-456-7890 上给出了部分匹配。有没有办法让单词边界在其计数中包含连字符?

最佳答案

您可以使用环视:

(?<!-)\b\d(?:[-,\h]?\d){5,7}(?!-)\b

参见 regex demo

Swift 正则表达式使用 ICU 风格,因此后瞻和先行都可以工作。 (?<!-)向后看确保没有 -在开始新单词的数字之前(或在单词边界之后),以及 (?!-)前瞻确保没有 -在单词边界的第 8 个数字之后。

不要忘记使用双反斜杠。

正如@AlanMoore 所建议的,边界一词和 - -lookarounds 可以替换为 lookarounds (?<![\w-])(?![\w-]) .这将使正则表达式更加高效,因为在开始和结束时只检查一个位置:

(?<![\w-])\d(?:[-,\h]?\d){5,7}(?![\w-])

参见 another demo

关于ios - 如何修改包含 '-'作为单词字符的单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34137180/

相关文章:

ios - 通过 UIWebView 隐藏和显示 UIButton

regex - 在一行中的特定位置查找值

ios - 删除除命名之外的所有 subview

ios - 当我将它添加到我的项目时,cocoapods 链接器错误

ios - UIButton 不在两个图像之间切换 Swift 4.2

ios - AVAssetWriter 可以透明写入文件吗?

regex - 如何使用 Oracle regexp_substr 从字符串中提取单词?

java - 杂乱的字符串。最后排除 '@' 字符的正则表达式

ios - 如何继续查看 panGesture 上的 Controller

iOS FCM 推送通知无法快速在后台状态下工作?