Учитывая примерную строку ниже, я пытаюсь захватить поля 'to', 'from', 'subject' и 'type' и выплевывать их обратно в другом формате. Проблема в том, что эти поля (от, от и т. Д.) Могут быть в любом порядке.regex соответствует нескольким группам захвата в любом порядке
ОБРАЗЦА STRING К REGEX НА
<cfmail to="#toAddr#" from="#fromAddress"
subject="#subject#" type="html">
#emailMsg#
</cfmail>
ВЫХОДА Я ИЩУ
to:toAddr, from:fromAddress, subject:subject
Если бы я знал, что порядок этих местах я заинтересован в всегда была такой же, то это довольно легко, но я в тупике о том, как это сделать, если, например, «от» доходит до «
Перлайтер с одним слоем, который у меня есть прямо сейчас (просто тестирование с 'to' и ' субъект ')
s/<cfmail.*?((to)="(.*?)")|((subject)="(.*?)").*<\/cfmail>/\1:\2, \3:\4/g
Это заканчивается тем, что соответствует значению 'to', но останавливается там, и я не получаю ничего для значения «subject». Я попробовал несколько вариантов этого, когда я меняю настройку группы и т. Д., Но мне не повезло.
Почему вы не используете надлежащую библиотеку анализа XML? – lenz
Если вы должны сделать это с помощью регулярного выражения (ну, вы используете Perl ...), сделайте это в два этапа: сначала запишите подстроку ''. Затем сделайте 's /// g' альтернативы, как в вашем однострочном, но не соответствующие окружающим тэгам XML. –
lenz
спасибо Ленц. Я думаю, что ваше предложение разбить его на шаги - это путь. – Josh