Regex 正则表达式匹配(如果之前存在)
所以我想检查输入字符串是否可以用作文件大小的表示。 例子;这些是有效的:Regex 正则表达式匹配(如果之前存在),regex,Regex,所以我想检查输入字符串是否可以用作文件大小的表示。 例子;这些是有效的: 15kb 12mb 128b 64gib 12mib 这些都是无效的: 12m 0mb gb gib 64ib 52ki 除了检查无效值23ib之外,所有操作都正常。这是我的正则表达式: ^([1-9]\d+)(?i)([k|m|g|t|p]?i?)b$ 因此,如果前面的组也匹配,我只想匹配字符I。您可以将[kmgtp]设置为必须,但整个第二组都是可选的并使用 (?i)^([1-9]\d*)([kmgtp]i?)?b
15kb
12mb
128b
64gib
12mib
这些都是无效的:
12m
0mb
gb
gib
64ib
52ki
除了检查无效值23ib
之外,所有操作都正常。这是我的正则表达式:
^([1-9]\d+)(?i)([k|m|g|t|p]?i?)b$
因此,如果前面的组也匹配,我只想匹配字符
I
。您可以将[kmgtp]
设置为必须,但整个第二组都是可选的并使用
(?i)^([1-9]\d*)([kmgtp]i?)?b$
等价物:
(?i)^([1-9]\d*)((?:[kmgtp]i?)?)b$
见
注:
匹配可选的[k | m | g | t | p]?i
,k
,m
,g
,t
,然后匹配可选的p
,因此i
可以不使用前面的辅音进行匹配i
匹配[k | m | g | t | p]
,k
,m
,g
,t
或p
字符,您应该从字符类中删除- 如果使用
,则无法将[1-9]\d+
类字符串与一位数字匹配。将2b
替换为\d+
将修复此问题,因为\d*
匹配0次或多次出现*
- 在这里的模式开头使用内联修饰符
,因为它可能会影响所有的模式(?i)
[kmgtp]
,但整个第二组都是可选的,可以使用
(?i)^([1-9]\d*)([kmgtp]i?)?b$
等价物:
(?i)^([1-9]\d*)((?:[kmgtp]i?)?)b$
见
注:
匹配可选的[k | m | g | t | p]?i
,k
,m
,g
,t
,然后匹配可选的p
,因此i
可以不使用前面的辅音进行匹配i
匹配[k | m | g | t | p]
,k
,m
,g
,t
或p
字符,您应该从字符类中删除- 如果使用
,则无法将[1-9]\d+
类字符串与一位数字匹配。将2b
替换为\d+
将修复此问题,因为\d*
匹配0次或多次出现*
- 在这里的模式开头使用内联修饰符
,因为它可能会影响所有的模式(?i)
- 为什么不更明确地指定值呢?这样,您就可以擦除类似于
20pib
的内容
^(\d+)(?i)([kmg]?i?|p|t)b$
这包括使用\d+而不是[1-9]\d*
的0值,如0mb
,这对我来说更容易阅读
请参阅。为什么不更明确地指定值?这样,您就可以擦除类似于
20pib
的内容
^(\d+)(?i)([kmg]?i?|p|t)b$
这包括使用\d+而不是[1-9]\d*
的0值,如0mb
,这对我来说更容易阅读
请参阅。
0b
应有效(文件可以为空)@Cid通常说:是。但是我不需要零字节。像10gb
这样的字符串有效吗?为什么0mb无效?是否要求0UNIT无效?请理解@Cid,只是想知道它是否故意被排除在有效模式之外。我想这不是一个完整的清单。我们可以假设OP意味着包含它(以及其他一些有效大小)。0b
应该是有效的(文件可以是空的)@Cid一般来说:是的。但是我不需要零字节。像10gb
这样的字符串有效吗?为什么0mb无效?是否要求0UNIT无效?请理解@Cid,只是想知道它是否故意被排除在有效模式之外。我想这不是一个完整的清单。我们可能只是假设OP意味着包含它(以及其他一些有效的大小)。“但是我不需要零字节来实现我的目的。”@Cid我已经阅读了评论,它不是必需的。我问为什么它是无效的。那么这应该是一个评论,而不是一个评论answer@Cid你看过我的答案了吗?在我的回答中,还有更多不同于Wiktors的地方。在开始争论之前,请清楚地告诉自己。我还指出了消除pid和更好的可读性。这不是因为愤怒,这只是没有回答问题。另外,您正在根据自己的喜好更改预期输出,“但我的目的不需要零字节”。@Cid我已经阅读了评论,认为这不是必需的。我问为什么它是无效的。那么这应该是一个评论,而不是一个评论answer@Cid你看过我的答案了吗?在我的回答中,还有更多不同于Wiktors的地方。在开始争论之前,请清楚地告诉自己。我还指出了消除pid和更好的可读性。这不是因为愤怒,这只是没有回答问题。另外,您正在根据自己的口味更改预期产量