Вы можете использовать регулярные выражения для этого.Вот шаблон регулярных выражений, который может проанализировать весь DN, тогда вы можете просто взять интересующие вас части:
(?:^|,\s?)(?:(?<name>[A-Z]+)=(?<val>"(?:[^"]|"")+"|(?:\\,|[^,])+))+
Здесь он отформатирован немного лучше, и с некоторыми комментариями:
(?:^|,\s?) <-- Start or a comma
(?:
(?<name>[A-Z]+)
=
(?<val>
"(?:[^"]|"")+" <-- Quoted strings
|
(?:\\,|[^,])+ <-- Unquoted strings
)
)+
Это регулярное выражение даст вам name
и val
группы захвата для каждого совпадения.
Строки DN могут быть заключены в кавычки (например, "Hello"
, что позволяет имсодержат неэкранированные запятые. В качестве альтернативы, если они не заключены в кавычки, запятые должны быть экранированы обратной косой чертой (например, Hello\, there!
). Это регулярное выражение обрабатывает строки как в кавычках, так и без кавычек.
Вот ссылка, так что вы можете увидеть ее в действии:https://regex101.com/r/7vhdDz/1