java正则表达式在方括号内提取uuid

时间:2018-01-30 09:13:06

标签: java regex

我在括号内有字符串,如下所示:

t1 = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(int status) {
                    if (status != TextToSpeech.ERROR) {
                        t1.setLanguage(Locale.UK);
                    t1.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                        @Override
                        public void onStart(String utteranceId) {

                        }

                        @Override
                        public void onDone(String utteranceId) {
                            if(utteranceId.equals("finish")){
                                finish();
                            }
                        }

                        @Override
                        public void onError(String utteranceId) {

                        }
                    });
                        }

                }
            });

如果字符串是UUID格式,我想提取字符串。

示例:[space string space]

使用java正则表达式我如何获得[ d6a413f4-059c-11e8-ba89-0ed5f89f718b ]

3 个答案:

答案 0 :(得分:1)

对于您的示例,您可以使用lookaround来匹配[]之间的内容:

(?<=\[ ).*?(?= \])

<强>解释

  • (?= \])积极的观察,断言以前的是[
  • .*?匹配任何字符零次或多次非贪婪
  • (?= \])肯定前瞻以断言接下来是]

例如:

String regex = "(?<=\\[ ).*?(?= \\])";
String string = "[ d6a413f4-059c-11e8-ba89-0ed5f89f718b ]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}

Java example output

答案 1 :(得分:0)

使用正则表达式

\[ ([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}) ]

Regex101

为什么你不想这样做

如果您知道您的字符串肯定具有正确的格式,那么您可以使用substring来获取UUID

class Main {
    public static void main(String... args) {
        String s = "[ d6a413f4-059c-11e8-ba89-0ed5f89f718b ]";
        System.out.println(s.substring(2, s.length()-2));
    }
}

Try it online!

这比使用正则表达式选项更快。

答案 2 :(得分:0)

正则表达式检查给定的String是否包含有效的UUID:

"\\[ ([a-f0-9]{8}\\-(?:[a-f0-9]{4}\\-){3}[a-f0-9]{12}) \\]"

那么,这个正则表达式发生了什么:

\\[ - 字符“[”及其后的空格

[a-f0-9]{8} - 从“a”到“f”以及从“0”到“9”的字符恰好八次(123e5670部分)

\\- - “-”字符

(?:[a-f0-9]{4}\\-){3} - 您想要出席三次的非捕获组(此非捕获组应包含4个字符,范围从“a”到“{{ 1}}'或从'f'到'0'。在这4个字符后必须有“9”字符)(-部分)

a234-b234-c234- - 从“[a-f0-9]{12}”到“a”以及从“f”到“0”的字符正好十二次({{1}部分)

9 - 空格和“d23456789012”字符 搜索字符串以匹配\\]方法后,您只使用]方法打印捕获组#1(捕获组#1包含在括号find()中)

您的UUID位于捕获组1 中。这是一个如何从源字符串中获取UUID的简单示例:

group(1)