在Java模式中使用重复组的正则表达式

时间:2016-10-19 18:13:43

标签: java regex

假设我有以下字符串:

mya!phaNum3rics-456-456-lll
zzzz-6a6-6a6-lll
vvvv-4-4-lll

这些被视为匹配因为" second"和#34;第三"组重复,最后一组以lll结尾。正则表达式允许第二个和第三个"组中的任何字符序列"。

如果以下内容也被视为匹配,会有多大差异?

zasdfdf-zadezz-6a6-6a6-lll

"第三到最后一组"重复#34;倒数第二组"以" group"结尾lll

1 个答案:

答案 0 :(得分:1)

你需要

-([^-]+)-\1-lll$

请参阅regex demo

  • - - 连字符
  • ([^-]+) - 第1组捕获除-
  • 以外的一个或多个符号
  • - - 连字符
  • \1 - backreference到捕获到第1组的文本
  • -lll - 文字字符的子字符串
  • $ - 字符串结束。

Java demo

String str = "mya!phaNum3rics-456-456-lll";
Pattern ptrn = Pattern.compile("-([^-]+)-\\1-lll$");
Matcher matcher = ptrn.matcher(str);
if (matcher.find()) {
    System.out.println(matcher.group(0) + " matched!");
}

.matches一起使用的相同正则表达式的变体:

if (str.matches(".*-([^-]+)-\\1-lll")) {
    System.out.println(str + " matched!");
}