正则表达式量词语句失败
Regex Quantifier Statement Fails
我需要我的正则表达式语句来执行以下操作:
需要:
- a-z 0-多次,
- 0-9 0-3次,
- & 0-多次,
- " " 0-1 次,
- 至少 8 个字符。
我也使用这个网站来测试我的代码 - https://regexr.com.
我的正则表达式:
([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}
这些应该有效:
abcD &EFG,
ABCde f123,
&&12ADSD&&.
这些不应该:
a bcD &EFG,
AB5Cde f123,
&&12ADSD&&34,
1234567,
nope.
问题是我的正则表达式会接受任意数量的数字,不管我对它设置限制,它会接受单词中间的空格,但出乎意料,我不知道为什么。
我是正则表达式的新手,所以对我温柔点
您当前模式的开头 ([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}
有 0+ 次、0-3 次或可选的量词。
最后它应该匹配至少 8 次以上不匹配任何示例的单词字符。
您可以使用否定前瞻 (?!
断言没有出现 4 位数字或出现 2 次 space 然后重复匹配字符 [=63] 中列出的 8 次以上=].
^(?!(?:[^\r\n0-9]*[0-9]){4})(?!(?:\S* ){2})[a-zA-Z0-9 &]{8,}$
^
字符串开头
(?!
否定前瞻,断言右边的不是
(?:[^\r\n0-9]*[0-9]){4}
匹配一个数字 4 次
)
关闭前瞻
(?!
否定前瞻,断言右边的不是
(?:
非捕获组
\S*
匹配 0+ 次非白色 space 字符,然后匹配 space
){2}
关闭非捕获组重复2次
)
否定前瞻,断言不是 2 spaces
[a-zA-Z0-9 &]{8,}
匹配任何列出的 8 次以上
$
字符串结束
与正面前瞻有些不同
Pattern.compile("(?=^[^ ]* ?[^ ]*$)(?=^([^0-9]*[0-9]?){1,3}$)^[A-Za-z0-9\& ]{8,}$")
[a-zA-Z0-9\& ]{8,}
: 允许字符的 8 个或更多字符。
(?=^[^ ]* ?[^ ]*$)
:正面前瞻:允许单个 space
(?=^([^0-9]*[0-9]?){1,3}[^0-9]*$)
:正向前看最多允许三个数字实例
我需要我的正则表达式语句来执行以下操作: 需要:
- a-z 0-多次,
- 0-9 0-3次,
- & 0-多次,
- " " 0-1 次,
- 至少 8 个字符。
我也使用这个网站来测试我的代码 - https://regexr.com.
我的正则表达式:
([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}
这些应该有效:
abcD &EFG,
ABCde f123,
&&12ADSD&&.
这些不应该:
a bcD &EFG,
AB5Cde f123,
&&12ADSD&&34,
1234567,
nope.
问题是我的正则表达式会接受任意数量的数字,不管我对它设置限制,它会接受单词中间的空格,但出乎意料,我不知道为什么。
我是正则表达式的新手,所以对我温柔点
您当前模式的开头 ([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}
有 0+ 次、0-3 次或可选的量词。
最后它应该匹配至少 8 次以上不匹配任何示例的单词字符。
您可以使用否定前瞻 (?!
断言没有出现 4 位数字或出现 2 次 space 然后重复匹配字符 [=63] 中列出的 8 次以上=].
^(?!(?:[^\r\n0-9]*[0-9]){4})(?!(?:\S* ){2})[a-zA-Z0-9 &]{8,}$
^
字符串开头(?!
否定前瞻,断言右边的不是(?:[^\r\n0-9]*[0-9]){4}
匹配一个数字 4 次
)
关闭前瞻(?!
否定前瞻,断言右边的不是(?:
非捕获组\S*
匹配 0+ 次非白色 space 字符,然后匹配 space
){2}
关闭非捕获组重复2次
)
否定前瞻,断言不是 2 spaces[a-zA-Z0-9 &]{8,}
匹配任何列出的 8 次以上$
字符串结束
与正面前瞻有些不同
Pattern.compile("(?=^[^ ]* ?[^ ]*$)(?=^([^0-9]*[0-9]?){1,3}$)^[A-Za-z0-9\& ]{8,}$")
[a-zA-Z0-9\& ]{8,}
: 允许字符的 8 个或更多字符。
(?=^[^ ]* ?[^ ]*$)
:正面前瞻:允许单个 space
(?=^([^0-9]*[0-9]?){1,3}[^0-9]*$)
:正向前看最多允许三个数字实例