我想获取长度介于 6 到 8 位之间的密码。
我想匹配: 123-4567 和 12-34-56-78
失败: 1234567890 和 123-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/