Если Вы не должны абсолютно использовать regex, , использование забастовка> рассматривает использование Perl текст:: Сбалансированный для удаления круглой скобки.
use Text::Balanced qw(extract_bracketed);
my ($extracted, $remainder, $prefix) = extract_bracketed( $filename, '()', '[^(]*' );
{ no warnings 'uninitialized';
$filename = (defined $prefix or defined $remainder)
? $prefix . $remainder
: $extracted;
}
можно ли думать, "Почему делают все это, когда regex добивается цели в одной строке?"
$filename =~ s/\([^}]*\)//;
текст:: Сбалансированные дескрипторы вложили круглую скобку. Так $filename = 'foo_(bar(baz)buz)).foo'
будет извлечен правильно. regex базировался, решения, предлагаемые здесь, перестанут работать на этой строке. Тот остановится при первом закрытии paren, и другой съест их всех.
$filename = ~ s / ([^}] *)//; # возвращается 'foo_buz)) .foo'
$filename = ~ s / (.*)//; # возвращается 'foo_. нечто'
# текст сбалансировало нечто 'возвратов в качестве примера _). нечто'
, Если любое из regex поведений приемлемо, используйте regex - но зарегистрируйте ограничения и сделанные предположения.
Решил проблему с ответами в этой ветке: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/faf0b66c-294b-4d84-a19b-504dd8e81922 Мой код был очень похож на примеры из MSDN, показанные там, единственное, чего не хватало: doc.PreserveWhitespace = true при проверке.
Вы можете использовать классы в пространстве имен System.Security.Cryptography.Xml
для проверки XML-данных, подписанных цифровой подписью, если у вас есть открытый ключ в ваше хранилище сертификатов. Некоторое время назад я проделал некоторую работу со службами федерации AD, которые также используют SAML, и, насколько я помню, после того, как я нашел нужное мне пространство имен, все остальное было довольно просто - но это достаточно давно, и детали ускользают от меня.