2014-01-16 3 views
0

Мне нужно использовать preg_match, чтобы получить часть строки и использовать ее позже. Я не очень хорошо использую регулярное выражение, поэтому надеюсь, что вы сможете мне помочь.php preg_match regex специальный шаблон

Мой текущий регулярное выражение:

$regex = '/(?P<name>\w+): (?P<agency>\w+)/'; 

Мой код до сих пор:

$mail = imap_qprint(imap_body($mbox, $msgno)); 

$regex = '/(?P<name>\w+): (?P<agency>\w+)/'; 

preg_match($regex, $mail, $agency); 
print_r($agency); 

Для простоты $ почты выглядит следующим образом (в качестве примера):

Agency : Aname 
Firstname : Fname 
Lastname: Lname 
Number of participant : 1 

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

Заранее спасибо

ответ

0

С preg_match_all и (?P<name>.+)[:](?P<value>.+) вы получите:

$matches Array: 
(
    [name] => Array 
     (
      [0] => Agency 
      [1] => Firstname 
      [2] => Lastname 
      [3] => Number of participant 
     ) 

    [value] => Array 
     (
      [0] => Aname 
      [1] => Fname 
      [2] => Lname 
      [3] => 1 

Вы можете прочитать эти прочь, как

$data = array(); 
foreach($matches['name'] as $id => $name) { 
    $data[$name] = trim($matches['value'][$id]); 
} 

который даст вам ключ => значение называется $ данные со всей информацией.

EDIT: Для того, чтобы сделать его немного более надежным, я рекомендовал бы использовать флаг в многострочный и добавление^и $ в своем регулярном выражении

preg_match_all('#^(?P<name>.+)[:](?P<value>.+)$#m',$sourcestring,$matches); 
echo "<pre>".print_r($matches,true); 
+0

благодаря он работает действительно здорово :) –

0

Как насчет: $regex = '/Agency\s*:\s*(\w+).*?Firstname\s*:\s*(\w+).*?Lastname:\s*(\w+).*?Number of participant\s*:\s*(\d+)/s'

Смежные вопросы