匹配有限长度的正则表达式模式
Regex pattern to match limited length
我有一些数据是由任意随机顺序的字符和数字组成的。可以肯定的是,它必须同时包含数字和字符。我制作了一个符合这种情况的正则表达式。我现在想更进一步,将其限制为仅包含 5 个符号的字符串。
'1aa21' -match '(\d+)+[a-z]|[a-z]+(\d+)'
我试过在末尾添加 {5} 和 \S{5} 等等。
它似乎不起作用。达到预期目标的最佳方式是什么?
我们可以在字符串的开头使用两个lookaheads。一种用于检查 5 个字符的固定长度,另一种用于检查至少一位数字。字母可以匹配到模式里面。
^(?=\S{5}$)(?=\D*\d)\d*[a-z][a-z\d]*$
(?=\S{5}$)
向前看 $
在 5 个非空白字符后结束
(?=\D*\d)
向前查找任意数量的非数字后的数字
\d*[a-z][a-z\d]*
匹配任意数量的数字,后跟字母和任意数字
See this demo at regexstorm. For caseless matching add the (?i)
flag.
有不同的选项可以组合前瞻和匹配的内容。另一种方法是使用前瞻检查数字和字母并匹配 5 个字母数字字符。
^(?=\D*\d)(?=\d*[a-z])[a-z\d]{5}$
或者交替使用一个否定前瞻。
^(?!\d*$|[a-z]*$)[a-z\d]{5}$
取决于输入,哪一个性能最好。
我有一些数据是由任意随机顺序的字符和数字组成的。可以肯定的是,它必须同时包含数字和字符。我制作了一个符合这种情况的正则表达式。我现在想更进一步,将其限制为仅包含 5 个符号的字符串。
'1aa21' -match '(\d+)+[a-z]|[a-z]+(\d+)'
我试过在末尾添加 {5} 和 \S{5} 等等。 它似乎不起作用。达到预期目标的最佳方式是什么?
我们可以在字符串的开头使用两个lookaheads。一种用于检查 5 个字符的固定长度,另一种用于检查至少一位数字。字母可以匹配到模式里面。
^(?=\S{5}$)(?=\D*\d)\d*[a-z][a-z\d]*$
(?=\S{5}$)
向前看$
在 5 个非空白字符后结束(?=\D*\d)
向前查找任意数量的非数字后的数字\d*[a-z][a-z\d]*
匹配任意数量的数字,后跟字母和任意数字
See this demo at regexstorm. For caseless matching add the (?i)
flag.
有不同的选项可以组合前瞻和匹配的内容。另一种方法是使用前瞻检查数字和字母并匹配 5 个字母数字字符。
^(?=\D*\d)(?=\d*[a-z])[a-z\d]{5}$
或者交替使用一个否定前瞻。
^(?!\d*$|[a-z]*$)[a-z\d]{5}$
取决于输入,哪一个性能最好。