Как я могу преобразовать строку "abacdaa" в строку "1 b 2 cd 3 4" с помощью регулярного выражения?
Возможно ли это?Предпочтительным ароматом является perl, но подойдет и любой другой.
s/a/ \????? /g
Эта замена сделает это.
$ perl -p -e 's/a/++$i/ge' a b a c d a a 1 b 2 c d 3 4
В Java regex вы бы использовали цикл Matcher.find(), используя Matcher.appendReplacement/Tail, который в настоящее время занимает только StringBuffer.
Matcher.find()
Matcher.appendReplacement/Tail
StringBuffer
Итак, что-то вроде этого работает ( см. Также на ideone.com ):
String text = "hahaha that's funny; not haha but like huahahuahaha"; Matcher m = Pattern.compile("(hu?a){2,}").matcher(text); StringBuffer sb = new StringBuffer(); int index = 0; while (m.find()) { m.appendReplacement(sb, String.format("%S[%d]", m.group(), ++index) ); } m.appendTail(sb); System.out.println(sb.toString()); // prints "HAHAHA[1] that's funny; not HAHA[2] but like HUAHAHUAHAHA[3]"
java.util.regex.Matcher
Appendable