Как я могу сопоставить все с регулярным выражением PHP? - PullRequest
1 голос
/ 02 июня 2009

Как я могу сопоставить все с регулярным выражением PHP? Я попытался: /[.\r\n]*/, но это не работает. Есть идеи? Спасибо.

Это метод, который я создал для класса PHP для разбора электронной почты:

public function getHeader($headerName) { 
    preg_match('/[\r\n]' . $headerName . '[:][ ](.+)[\r\n][^ \t]/Uis', "\n" . ltrim($this->originalMessage), $matches); return preg_replace('/[\r\n]*/', '', $matches[1]); 
    } 

Ответы [ 5 ]

9 голосов
/ 02 июня 2009

/.*/s (см. документы Perl ). Параметр s означает (цитируя этот URL):

Обрабатывать строку как одну строку. (Сделать. Соответствие новой строки)

6 голосов
/ 02 июня 2009

Я предполагаю, исходя из вашего включения \n и \r выше, что вы хотите сопоставить в нескольких строках. В этом случае используйте:

/.*/s

(обратите внимание на явный модификатор /s, то есть измените ., чтобы он соответствовал любому символу, даже символу новой строки, который обычно не совпадает.)

См. http://www.perl.com/doc/manual/html/pod/perlre.html

2 голосов
/ 03 июня 2009

Почему вы хотите соответствовать всему? Нет смысла использовать это как условие, потому что это всегда верно. Если вы хотите захватить текст, вам не нужно регулярное выражение для этого, потому что вы просто используете всю строку. Если вы пытаетесь обойти проверку на наличие загрязнений, то позор вам (и задайте отдельный вопрос о том, как сделать это правильно).

Обратите внимание, что у нас есть небольшая проблема XY здесь. Вы имеете в виду некоторую задачу X и думаете, что Y является частью решения. Вы спрашиваете о Y, но никогда не говорите нам X. Трудно ответить на ваш настоящий вопрос, когда мы не знаем, что вы пытаетесь сделать. :)

0 голосов
/ 03 июня 2009

/[\.\r\n]+/ делает то, что вы хотите?

Этот клудж работал у меня и раньше:

my $abstract_text = /Abstract:([\s\S]+?)\nReferences/m;

Это полезно, если вы хотите захватывать шаблоны с произвольным текстом или вмешиваться между несколькими захватами.

0 голосов
/ 02 июня 2009

Что насчет /.*/s?

В классе символов ([]),. просто означает период.

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