С учетом следующего kotlin кода;
println(introduceConditionalAndBetweenWordsWith1Passes("'AAA' 'BBB' 'CCC' 'DDDD'"))
println(introduceConditionalAndBetweenWordsWith2Passes("'AAA' 'BBB' 'CCC' 'DDDD'"))
fun introduceConditionalAndBetweenWordsWith1Passes(input: String): String {
return input.replace("'(.*?)' '(.*?)'".toRegex(), "\'$1\' & '\$2'")
}
fun introduceConditionalAndBetweenWordsWith2Passes(input: String): String {
val secondPass = input.replace("'(.*?)' '(.*?)'".toRegex(), "\'$1\' & '\$2'")
return secondPass.replace("'(.*?)' '(.*?)'".toRegex(), "\'$1\' & '\$2'") //2 iterations to resolve the one that don't match the first pass
}
Произведет;
'AAA' & 'BBB' 'CCC' & 'DDDD'
'AAA' & 'BBB' & 'CCC' & 'DDDD'
Кажется, что механизм регулярных выражений обрабатывает 'AAA' и 'BBB' как 1 совпадение & 'CCC' и 'D DDD 'как второе совпадение (и так далее), однако я хочу, чтобы двигатель также совпадал с' BBB '&' CCC 'в этом примере
Вопрос в том; В регулярных выражениях, как мне добиться полного прочтения строки за один проход, который добавляет '&' между всеми словами, заключенными в одинарные кавычки?