gpt4 book ai didi

java - 正则表达式 ([mb|kb|gb|b|bytes]) 与 'b' 中的 'kb' 或大括号后没有 + 的 'gb' 不匹配

转载 作者:行者123 更新时间:2023-11-30 03:30:03 26 4
gpt4 key购买 nike

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

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

但是当给定输入“4096 mb”时,组大小类型仅匹配“m”而不匹配“b”。在大括号后添加“+”量词会将 grop sizetype 的输出指定为“mb”。该模式是使用 CASE_INSENSITIVE 编译的,因此这不是问题。这有效

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

理想情况下,第一个正则表达式不应该完全匹配“mb”吗?

最佳答案

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

[mb|kb|gb|b|bytes] 仅匹配给定列表中的单个字符,即,它可能匹配 mb |kb 等。它不会将 mb 视为单个字符类中的单词和 | 运算符将失去其特殊含义,并且仅匹配文字 | 符号。它不会执行 OR 运算。

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

DEMO

Pattern p = Pattern.compile("(?<sizevalue>\\p{N}+)(?:\\s*)(?<sizetype>(?:mb|kb|gb|b|bytes)\\b)");

关于java - 正则表达式 ([mb|kb|gb|b|bytes]) 与 'b' 中的 'kb' 或大括号后没有 + 的 'gb' 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29272903/

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