我正在检查两个正则表达式的字符串,如下所示:
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));
}
一切都按我想要的方式工作,但由于表达式非常相似,有没有办法将它们组合成一个表达式,使用|字符。我对正则表达式很陌生,我无法弄明白。
答案 0 :(得分:3)
在2个正则表达式之间放置一个管道,如下所示:
TcxGrid
答案 1 :(得分:0)
有可能这样做。我不确定它是否值得这样做,因为结果会非常复杂。无论如何:
(?:)
,以便您可以使用相同的表达式检索重要部分:"(?:(?:http(?:s?)://)?)youtu.be/(\\w+)"
和"(?:(?:(?:(?:http(?:s?)://)?)www.)?)youtube.com/watch\\Q?\\Ev=(\\w+)"
都捕获{{1}中的重要部分}} m.group(1)
所以这是最终的代码:
(?:prefixPattern1|prefixPattern2)(importantPart)
答案 2 :(得分:0)
您可以通过查找两个正则表达式中常见的部分来组合它们。这有点棘手,因为在版本中有" youtu.be"你不能使用" www。"。如果您发现困难,请尝试绘制图形以直观地看到它。从您已经拥有的模式开始,您将获得以下表达式:
pass_in( $str, [qw(A B C D E)]);