Tag: 反向引用

在正则表达式中使用反向引用来动态替换文本

我想像整数一样使用$ 1值。 我们的想法是使用等效的数组值替换originaltext中的所有数字并创建一个新文本。 下面想要的结果应该是“这是DBValue4,这是DBValue2,这是DBValue7” 另外,有没有办法保存这些反向引用以供进一步使用? String[] values = {“DBValue0″,”DBValue1″,”DBValue2″,”DBValue3″,”DBValue4″,”DBValue5″,”DBValue6″,”DBValue7″,”DBValue8″,”DBValue9″,”DBValue10”}; String originaltext = “This is 4, This is 2, This is 7”; text = originaltext.replaceAll(“(\\d)”,”$1″); // want something like text = originaltext.replaceAll(“(\\d)”,values[$1]); //or text = originaltext.replaceAll(“(\\d)”,values[Integer.parseInt(“$1”)]);

背后的反向引用

你能在后视镜中使用反向引用吗? 假设我想在我身后的任何地方split一个角色重复两次。 String REGEX1 = “(?<=(.)\\1)"; // DOESN'T WORK! String REGEX2 = "(?<=(?=(.)\\1)..)"; // WORKS! System.out.println(java.util.Arrays.toString( "Bazooka killed the poor aardvark (yummy!)" .split(REGEX2) )); // prints "[Bazoo, ka kill, ed the poo, r aa, rdvark (yumm, y!)]" 使用REGEX2 (其中反向引用嵌套在REGEX1内的前瞻)工作,但REGEX1在运行时给出此错误: Look-behind group does not have an obvious maximum length near index 8 (?<=(.)\1) ^ 我想这是有道理的,因为通常后向引用可以捕获任意长度的字符串(如果正则表达式编译器更聪明一点,它可以确定在这种情况下\1是(.) ,因此具有有限的长度)。 […]