gpt4 book ai didi

java - 用于验证自定义格式的正则表达式

转载 作者:行者123 更新时间:2023-12-03 21:43:20 27 4
gpt4 key购买 nike

我有这样的格式:xx:xx:xxxx:xx:xx-y,其中 x 可以是 0-9 a-f A-F,y 只能是0 或 1。

我想出了这个正则表达式:([0-9A-Fa-f]{2}[:][0-9A-Fa-f]{2}[:][0-9A-Fa -f]{2}|[-][0-1]{1})

(参见 regexr)。

但这也匹配 0a:0b:0c-3,这不是预期的。

有没有办法从结果中删除这些情况?

最佳答案

[:] 表示列表中仅包含 : 的字符。它与:[-] 的结果与 - 相同。
此外,{1} 的意思是“前一段正好一次”。它没有任何作用,您可以将其完全删除。

要匹配xx:xx:xxxx:xx:xx-y,匹配-y的部分必须是可选的。可选部分后面的量词 ? 将其标记为可选。

总而言之,您的regex 应该是这样的:

[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}(-[01])?

如果可以告诉您使用的 regex 引擎忽略字符大小写,那么您可以从中删除 A-F(或 a-f)所有字符类和 regex 变为:

[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}(-[01])?

它是如何工作的,一 block 一 block 地:

[0-9a-f]      # any digit or letter from (and including) 'a' to 'f'
{2} # the previous piece exactly 2 times
: # the character ':'
[0-9a-f]
{2}
:
[0-9a-f]
{2}
( # start a group; it does not match anything
- # the character '-'
[01] # any character from the class (i.e. '0' or '1')
) # end of group; the group is needed for the next quantifier
? # the previous piece (i.e. the group) is optional
# it can appear zero or one times

查看实际效果:https://regexr.com/4rfvr

更新

正如@the-fourth-bird 在评论中提到的,如果 regex 必须匹配整个字符串,那么您需要锚定它的末端:

^[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}(-[01])?$

^ 作为 regex 的第一个字符匹配字符串的开头,$ 作为最后一个字符匹配字符串的结尾.这样 regex 只匹配整个字符串(当 xx:xx:xxxx:xx:xx- 前后没有其他字符时y 部分)。

如果您使用 regex 在较大的字符串中查找 xx:xx:xxxx:xx:xx-y 那么您不需要添加 ^$。当然,您可以只添加 ^$regex 只匹配字符串的开头或结尾。

关于java - 用于验证自定义格式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59542236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com