В контексте использования в языках регулярные выражения действуют на строки, а не на строки. Таким образом, вы должны нормально использовать регулярное выражение, считая, что входная строка имеет несколько строк.
В этом случае заданное регулярное выражение будет соответствовать всей строке, так как «& lt; FooBar & gt;» настоящее. В зависимости от специфики реализации регулярного выражения значение $ 1 (полученное из «(. *)») Будет либо «fghij», либо «abcde\nfghij». Как говорили другие, некоторые реализации позволяют вам контролировать, является ли "." будет соответствовать новой строке, предоставив вам выбор.
Использование регулярных выражений на основе строк обычно используется для командной строки, например egrep.
Недавно о linux-kernel говорили о предоставлении API для чего-то подобного, но камнем преткновения является то, что вы не можете DMA из обычных буферов пользовательского пространства на сетевую карту, потому что :
В последних ядрах
Насколько я знаю, вы используете наиболее эффективные доступные вызовы, если не можете использовать sendfile (2). Различные аспекты эффективного высокопроизводительного сетевого кода охватываются Проблема C10K