1

例如,假设我有一个像这样的正则表达式:

"The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)."

这个正则表达式有 3 个分组的组件——如果它与给定的字符串匹配,正则表达式 api 将允许您轻松地提取每个组内的值。

现在假设我有 3 个字符串:

["red", "leaps","cat"]

如果我们假设正则表达式中不在组内的所有字符只是文字文本字符 - 有没有办法将这 3 个字符串中的每一个插入原始正则表达式中的相应组中,从而产生一个输出字符串结合正则表达式的非分组部分?在这种情况下,导致“敏捷的红狐跳过懒惰的猫”。最好不需要有一个已经匹配正则表达式的字符串。

我希望在 Java 中做到这一点 - 我很确定 java.util.regex 不支持这个,但我想也许会有一个 3rd 方库可以允许这样做。谁能给我一些指示?

4

2 回答 2

1

大多数正则表达式实现允许您在搜索和替换中执行以下操作:

s/The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)/The quick $1 fox $2 over the lazy $3/
于 2009-11-28T23:02:48.257 回答
1

只要您可以不使用嵌套捕获组,您就可以简单地使用更多正则表达式来检索文字:

String[] strings = new String[] { "red", "leaps", "dog" };
String[] literals = new String("The quick (red|brown|blue|yellow) fox " +
    "(jumps|leaps) over the lazy (dog|cat).").split("(?=[^\\\\])\\(.*?\\)");

StringBuilder sb = new StringBuilder(literals[0]);
for(int i = 0; i < strings.length; i++) {
    sb.append(strings[i]);
    sb.append(literals[i + 1]);
}

// => sb.toString();
于 2009-11-28T23:32:44.030 回答