gpt4 book ai didi

UUID 的 Java 正则表达式

转载 作者:搜寻专家 更新时间:2023-11-01 02:04:37 25 4
gpt4 key购买 nike

我想解析一个具有以下格式的 UUID 的字符串

"<urn:uuid:4324e9d5-8d1f-442c-96a4-6146640da7ce>"

我试过用下面的方式解析它,这很有效,但我认为它会很慢

private static final String reg1 = ".*?";
private static final String reg2 = "([A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12})";
private static final Pattern splitter = Pattern.compile(re1 + re2, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

我正在寻找一种更快的方法并在下面进行了尝试,但它无法匹配

private static final Pattern URN_UUID_PATTERN = Pattern.compile("^< urn:uuid:([^&])+&gt");

我是正则表达式的新手。任何帮助表示赞赏。

\阿库拉

最佳答案

您的更快正则表达式示例是使用 <其中输入是 &lt;所以这很困惑。

关于速度,首先,你的UUID是十六进制的,所以不要和A-Z匹配而是a-f .其次,你没有给出大小写混合的迹象,所以不要使用不区分大小写的方式,并在范围内写出正确的大小写。

您没有解释您是否需要 UUID 之前的部分。如果不是,请不要包括 .*? , 你也可以为 re1 编写文字和 re2一起在你的final Pattern .也没有迹象表明您需要 DOTALL。

private static final Pattern splitter =
Pattern.compile("[a-f0-9]{8}(?:-[a-f0-9]{4}){4}[a-f0-9]{8}");

或者,如果您测量正则表达式的性能太慢,您可以尝试另一种方法,例如:
每个 uuid 是否都像您的示例一样以“uuid:”开头?如果是这样,你可以

  1. 找到“uuid:”的第一个索引为i,然后
  2. 子字符串 0 到 i+5 [假设您完全需要它],以及
  3. 子字符串 i+5 到 i+41,如果我算对了(长度为 36 个字符)。

按照类似的思路,您的更快的正则表达式可能是:

private static final Pattern URN_UUID_PATTERN =
Pattern.compile("^&lt;urn:uuid:(.{36})&gt;");

OTOH 如果您所有的输入字符串都将以这些确切的字符开头,则无需执行先前建议中的第 1 步,只需 input.substring(13, 49);

关于UUID 的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37615731/

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