Использовать шаблонный модификатор sU получит желаемое соответствие в PHP.
preg_match('/(.*)/sU',$content,$match);
http://dreamluverz.com/developers-tools/regex-match-all-including-newline http://php.net/manual/en/reference.pcre .pattern.modifiers.php
Этот вопрос, возможно, будет закрыт, потому что он считается основанным на мнении, или не связан с кодом, или как угодно ...
Тем не менее, Голанг считается довольно самоуверенным, и, поскольку я считаю стандарты очень важными, я буду придерживаться своего взгляда на неписаное правило и того, как я примирю, по сути, почему ReadCloser
хорошо, но некоторые другие er
интерфейсы могут не быть.
Я бы интерпретировал ReadCloser
, чтобы не нарушать «правило» (я бы назвал это соглашением более похожим). У меня есть ряд аргументов, почему я бы сказал, что это не нарушает соглашение:
Интерфейс ReadCloser
не является автономным интерфейсом. Это сложный интерфейс. Это имя отражает это. Он объединяет Read
и Close
(две функции в интерфейсе, который вам нужен) и добавляет суффикс er
. То, как реализованы обе функции и откуда они берутся, не имеет отношения к интерфейсу. Если вы что-то прочитали, скорее всего, вам тоже придется закрыть ресурс. Имеет смысл только объединить два интерфейса, поэтому вы можете использовать тип, который гарантирует доступность функций Reader
и Closer
.
Так же, как и заикания руководств WRT с именами , следует избегать. Особенно, если это не добавляет никакой ценности. Технически можно утверждать, что интерфейс должен называться ReaderCloser
, но означает ли это имя что-либо, что не передается именем ReadCloser
? Конечно, нет. Последний не повторяет суффикс и читается легче.
er
и CamelCasing Примеры однофункциональных интерфейсов er
, таких как Stringer
или Publisher
, действительно вырезаны & amp; сухой. A Stringer
содержит функцию String
. Конец истории. То же, что и интерфейс Publisher
.
Вы заметите, что интерфейс ReadCloser
является CamelCased, что предполагает, что это композитный тип. Просто разделите имя на символы UpperCase и добавьте суффикс к каждой части. Если части являются добросовестными er
интерфейсами, и составной интерфейс имеет смысл (см. Пункт 1: если вы читаете, скорее всего, вам придется закрыть), то это допустимый составной интерфейс.
Примеры недопустимого интерфейса er
:
type FileReader interface {
ReadCloserer
ScanDir(string) ([]string, error)
IsFile(string) bool
Open(string, string) error
// and so on
}
Этот интерфейс содержит слишком много функций BS для упаковки в интерфейс FileReader
.