UUID的java正则表达式

UUID的java正则表达式,java,regex,Java,Regex,我想解析一个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}

我想解析一个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");
private静态最终模式URN\u UUID\u Pattern=Pattern.compile(“^
我对regex不熟悉。 感谢您的帮助


\Aqura

如果不更改此格式,则更快的正则表达式示例将使用
。
我认为更快的方法是使用String.substring()方法。
例如:

String val = "&lt;urn:uuid:4324e9d5-8d1f-442c-96a4-6146640da7ce&gt;";
String sUuid = val.substring(13, 49);
UUID uuid =  UUID.fromString(sUuid);
类内字符串用于存储数据的字符数组,在包java.lang.String中:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
...
113: /** The value is used for character storage. */
114: private final char value[];
...
}
公共最终类字符串
实现java.io.Serializable、Comparable、CharSequence{
...
113://**该值用于字符存储*/
114:私有最终字符值[];
...
}
方法“String substring(int beginIndex,int endIndex)”从开始到结束索引复制数组元素,并在新数组的基础上创建新字符串。
复制阵列这是一个非常快速的操作。

等等,您的数据中有
,但请使用
^提示:如果性能确实是一个问题,请记住UUID的结构是固定的。它具有固定长度、固定子字段等。因此,使用对substring()的调用只是“编码工作”,例如“剪切”您正在寻找的基本部分。然后您只需要检查输入的初始长度。。。换句话说:您搜索“uuid:”;然后您可以“substring()”冒号后面的36个字符;然后从那里开始分割。你的
reg2
是错误的。UUID是一个十六进制数,因此只有字母a到F。任何其他字母都是错误的。如果字符串的格式总是相同的,例如,
“urn:UUID:”
,那么表达式就不会太复杂:
urn:UUID:(.*)
(或者甚至可能是
UUID:([a-f0-9\-])
“但是我认为它会很慢”你为什么这么想?你真的测量过吗?
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
...
113: /** The value is used for character storage. */
114: private final char value[];
...
}