我正在写一个正则表达式,它可以捕获一个值以及它之后的任何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;完全?
答案 0 :(得分:2)
您需要使用捕获或非捕获组而不是字符类。
[mb|kb|gb|b|bytes]
仅匹配给定列表中的一个charcater,即它可能与m
或b
或|
或k
或{{ 1}}等等。它不会将b
视为单个单词,而字符类中的mb
运算符将失去它的特殊含义并仅匹配文字|
符号。它不会进行OR操作。
|
(?<sizevalue>\p{N}+)(?:\s*)(?<sizetype>(?:mb|kb|gb|b|bytes)\b)