Düzenli ifade ve satır

2 Cevap php

Böyle metin var:

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

own text from the attached returned message.

                   The mail system

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

Bunu e-posta ayrıştırmak zorunda. Bu işte bana yardımcı olabilir mi?


upd

<%here%> başka e-posta adresleri var olabilir. 'Posta sistemi' metin arasında bir bağlantı olmalıdır. Ben o metnin sonra gider hangi e-posta gerekir.

2 Cevap

Bu metni dikkate alındığında $ metin, ne bu konuda saklanır:

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

Bana verir:

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


Basically, I used a pretty simple regex, that matches :

  • Bir < karakter
  • anything that's not Bir > karakter : [^>]
    • en az bir kez: [^>]+
    • Onu yakalayan: ([^>]+)
  • Bir > karakter

Yani, < ve > aramda bir şey yakalar.


Edit after comments+edit of the OP :

Eğer sonra sadece bulunuyor e-posta adresi The mail system, bunu kullanabilirsiniz isterseniz:

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

Ben daha önce yayınlanmıştır ne ek olarak, bu bekler:

  • Dize The mail system
  • Beyaz-Herhangi bir karakter sayısı: \s*

Sen preg_match() kullanmak ve bu girişe bakarak basit olmalıdır istiyorum:

<?php

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

Bu maç olacak diğer desenler vardır, o aynı desen sopa zorunda değilsiniz. '<' ve '>' Lütfen giriş burada faydalıdır.