正则表达式([mb | kb | gb | b | bytes])与'kb'或'gb'中的'b'不匹配,后面没有+

时间:2015-03-26 07:18:22

标签: java regex

我正在写一个正则表达式,它可以捕获一个值以及它之后的任何mb,kb,gb,字节 正则表达式是:

    (?<sizevalue>\p{N}+)(?:\s*)(?<sizetype>[mb|kb|gb|b|bytes])

但是当给出输入&#34; 4096 mb&#34;时,组sizetype仅匹配&#39; m&#39;而不是&#39; b&#39;添加&#39; +&#39;括号后的量词给出grop sizetype的输出为&#39; mb&#39;。该模式使用CASE_INSENSITIVE进行编译,因此不是问题。 这工作

   (?<sizevalue>\p{N}+)(?:\s*)(?<sizetype>[mb|kb|gb|b|bytes]+)

理想情况下,不应该是第一个正则表达式匹配&#39; mb&#39;完全?

1 个答案:

答案 0 :(得分:2)

您需要使用捕获或非捕获组而不是字符类。

[mb|kb|gb|b|bytes]仅匹配给定列表中的一个charcater,即它可能与mb|k或{{ 1}}等等。它不会将b视为单个单词,而字符类中的mb运算符将失去它的特殊含义并仅匹配文字|符号。它不会进行OR操作。

|

DEMO

(?<sizevalue>\p{N}+)(?:\s*)(?<sizetype>(?:mb|kb|gb|b|bytes)\b)