Иногда с помощью персонажей, которые вы указали, возможно простое экранирование. Например, использование обратной косой черты для выхода из скобки не будет работать в левой части строки подстановки в sed, а именно
sed -e 's/foo\(bar/something_else/'
. Я просто использую простое определение класса символов вместо , поэтому вышеприведенное выражение становится
sed -e 's/foo[(]bar/something_else/'
, которое я нахожу для большинства реализаций регекса.
BTW Классы символов являются довольно ванильными элементами регулярного выражения, поэтому они, как правило, работают в большинстве ситуаций, когда вы нужны экранированные символы в регулярных выражениях.
Изменить: после комментария ниже, просто подумал, что я бы упомянул о том, что вам также нужно учитывать разницу между автоматами конечного состояния и автоматами не конечного состояния при просмотре поведение оценки regexp.
Возможно, вам захочется взглянуть на «блестящую книгу с шаром», а также на эффективную Perl ( санированную ссылку Amazon ), в частности главу о регулярных выражениях, чтобы получить почувствуйте тогда разницу в типах оценки двигателя regexp.
Не все в мире PCRE!
В любом случае, регулярные выражения настолько неуклюжи по сравнению с SNOBOL ! Теперь это был интересный курс программирования! Наряду с тем, что на Simula .
Ах, радости изучения в UNSW в конце 70-х! (-:
У меня была похожая ситуация при тестировании apis. В итоге я связал экземпляр GuzzleClient с сервисным контейнером (см. Документацию ). Что-то вроде:
$this->app->instance('GuzzleHttp\Client', new MockClient);
Чтобы успешно смоделировать экземпляр, я затем проверил, имеет ли он определенное значение свойства (в моем случае base_url
устанавливается). Это определило, был ли экземпляр тестом, поскольку base_url
будет установлен.
Помимо этого метода, GuzzleHttp\Client
имеет MockHandler , который вы можете захотеть исследовать. Это может быть использовано для фальсификации тел ответа, заголовков и кодов состояния.