如何组合两个正则表达式(Java)

时间:2016-05-12 12:48:10

标签: java regex

我正在检查两个正则表达式的字符串,如下所示:

m = Pattern.compile("((http(s?)://)?)youtu.be/(\\w+)").matcher(word);
if (m.find()) {
    youtubeCodes.add(m.group(4));
}
m = Pattern.compile("((((http(s?)://)?)www.)?)youtube.com/watch\\Q?\\Ev=(\\w+)").matcher(word);
if (m.find()) {
    youtubeCodes.add(m.group(6));
}

一切都按我想要的方式工作,但由于表达式非常相似,有没有办法将它们组合成一个表达式,使用|字符。我对正则表达式很陌生,我无法弄明白。

3 个答案:

答案 0 :(得分:3)

在2个正则表达式之间放置一个管道,如下所示:

TcxGrid

答案 1 :(得分:0)

有可能这样做。我不确定它是否值得这样做,因为结果会非常复杂。无论如何:

  1. 步骤1:尽可能使用非捕获组(?:),以便您可以使用相同的表达式检索重要部分:"(?:(?:http(?:s?)://)?)youtu.be/(\\w+)""(?:(?:(?:(?:http(?:s?)://)?)www.)?)youtube.com/watch\\Q?\\Ev=(\\w+)"都捕获{{1}中的重要部分}}
  2. 将它们组合在一起:m.group(1)
  3. 所以这是最终的代码:

    (?:prefixPattern1|prefixPattern2)(importantPart)

答案 2 :(得分:0)

您可以通过查找两个正则表达式中常见的部分来组合它们。这有点棘手,因为在版本中有" youtu.be"你不能使用" www。"。如果您发现困难,请尝试绘制图形以直观地看到它。从您已经拥有的模式开始,您将获得以下表达式:

pass_in( $str, [qw(A B C D E)]);
相关问题