Регулярное выражение Perl [] для <> - PullRequest
0 голосов
/ 12 июня 2010

Итак, я пытаюсь прочитать XML-файл в строку в Perl и отправить его как часть сообщения SOAP.Я знаю, что это не идеально, так как существуют методы для отправки файлов SOAP, однако я ограничен необходимостью использовать настроенный SOAP и не настроен для отправки с поддержкой файлов.Мне нужно разобрать теги разметки <> и заменить их на [].Каков наилучший способ сделать это?

Ответы [ 4 ]

3 голосов
/ 12 июня 2010

Если простая замена < на [ и > на ] не работает для вас (возможно, из-за того, что угловые скобки отображаются в разделах CDATA где-то, что вы не хотите заменять), тогда вывероятно, не получит много пользы от регулярных выражений здесь.Регулярные выражения не подходят для сопоставления нерегулярных языков, таких как XML.

Возможно, вам не удастся найти <([^>]+)> и заменить его на [$1]:

$subject =~ s/<([^>]+)>/[$1]/g;
2 голосов
/ 12 июня 2010

А как насчет использования Base64 вместо?

2 голосов
/ 12 июня 2010

Будет ли что-то простое, как эта работа для вас?

$a=~y/<>/[]/;

y выполняет замену один на один. <</strong> становится [, а > становится ] . Документация perlop объясняет это более подробно.

1 голос
/ 12 июня 2010

Не кто-нибудь, пожалуйста, подумайте о детских печатях?

Как уже отмечали другие, как в ответах, так и в комментариях, выполнение этого с регулярным выражением вызовет проблемы в ближайшее время.поскольку ваши данные становятся достаточно сложными, чтобы включать либо [ / ], либо < / > символов.Как только это произойдет, любое простое регулярное выражение будет разбито, и вам нужно будет либо приклеить его обратно на ленту в надежде, что он еще долго будет хромать, прежде чем снова сломаться, или повторно реализовать его с реальным анализатором XML и / или лучшеРеализация SOAP.

OTOH, предложение leonbloy о кодировании ваших данных в base64 на самом деле довольно хорошее.Я не думал об этом, и он должен работать так же хорошо, как и правильная реализация SOAP, с оговорками, что отправленные данные будут больше, и, если вам нужно выполнить отладку на уровне проводов, может быть сложнее интерпретироватьсодержание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...