Я не собираюсь говорить, что нет регулярного выражения, которое будет работать для этого, но, скорее всего, его сложнее написать (и, что более важно, прочитать, для следующего человека, который имеет дело с кодом), чем это стоит,Самое близкое, что я могу получить с помощью регулярного выражения, - это если вы добавите запятую терминала к соответствующей строке, т. Е. Вместо:
"Key1=value1,Key2=value2"
вы добавите запятую так:
"Key1=value1,Key2=value2,"
Тогда регулярное выражение, которое дало мне самое близкое значение: "(?:(\\w+?)=(\\S+?),)?+"
... но это не совсем работает, если значения имеют запятые.
Вы можете попытаться продолжитьоткорректировав это регулярное выражение, но проблема, которую я обнаружил, состоит в том, что существует конфликт между поведением жадных и неохотных квантификаторов.Вы должны указать группу захвата для значения, которое является жадным по отношению к запятым до последней запятой до группы без захвата, состоящей из символов слова, за которыми следует знак равенства (следующее значение) ... и этопоследняя группа без захвата должна быть необязательной в случае, если вы соответствуете последнему значению в последовательности, и, возможно, сама неохотно.Сложно.
Вместо этого я советую просто разбить строку на "="
.Вы можете обойтись без этого, потому что, предположительно, значения не могут содержать символ знака равенства.
Теперь у вас будет набор подстрок, каждая из которых представляет собой набор символов, содержащих значениепоследняя запятая в строке, за которой следует ключ.Вы можете легко найти последнюю запятую в каждой подстроке, используя String.lastIndexOf(',')
.
Специально обработайте первую и последнюю подстроки (поскольку первая не имеет предварительно добавленного значения, а последняя не имеет добавленного ключа), и выдолжен быть в бизнесе.