Регулярное выражение и перевод строки - PullRequest
0 голосов
/ 26 апреля 2010

У меня есть такой текст:

<Neednt@email.com> If you do so, please include this problem report. 
<Anotherneednt@email.com> You can delete your

собственный текст из вложенного возвращенного сообщения.

                   The mail system

<Some@Mail.net>: connect to *.net[82.*.86.*]: Connection timed
out

Я должен разобрать с него письмоНе могли бы вы помочь мне с этой работой?


upd

В <% здесь могут быть другие адреса%> .Должна быть связь между текстом «Почтовая система».Мне нужно в электронном письме, которое идет после этого текста.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

Учитывая, что этот текст хранится в $ text, как насчет этого:

$matches = array();
if (preg_match('/<([^>]+)>/', $text, $matches)) {
  var_dump($matches[1]);
}

Что дает мне:

string 'Some@Mail.net' (length=13)


В основном я использовал довольно простое регулярное выражение, которое соответствует:

  • a < символ
  • все, что не является > символом: [^>]
    • хотя бы один раз: [^>]+
    • захватывает его: ([^>]+)
  • a > символ

Итак, он захватывает все, что находится между < и >.


Редактировать после комментариев + редактировать ОП:

Если вам нужен только адрес электронной почты, следующий за Почтовая система , вы можете использовать это:

$matches = array();
if (preg_match('/The mail system\s*<([^>]+)>/', $text, $matches)) {
  var_dump($matches[1]);
}

В дополнение к тому, что я писал ранее, ожидается:

  • Строка The mail system
  • Любое количество белых символов: \s*
2 голосов
/ 26 апреля 2010

Вы хотите использовать preg_match(), и, глядя на этот ввод, все должно быть просто:

<?php

if (preg_match('/<([^>]*?@[^>]*>/', $data, $matches)) {
  var_dump($matches); // specifically look at $matches[1]
}

Есть другие шаблоны, которые бы соответствовали этому, вам не нужно придерживаться того же шаблона. '<' И '>' в вашем вводе полезны здесь.

...