Извлечение совпадений из php regex

В perl regex мы можем извлечь согласованные переменные, ex ниже.

# extract hours, minutes, seconds $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format $hours = $1; $minutes = $2; $seconds = $3; 

Как это сделать в php?

 $subject = "E:contact@customer.com I:100955"; $pattern = "/^E:/"; if (preg_match($pattern, $subject)) { echo "Yes, A Match"; } 

Как извлечь письмо оттуда? (Мы можем взорвать его и получить его … но хотите, чтобы метод получил его непосредственно через регулярное выражение)?

Попробуйте использовать синтаксис имени подшаблона preg_match:

 <?php $str = 'foobar: 2008'; // Works in PHP 5.2.2 and later. preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches); // Before PHP 5.2.2, use this: // preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches); print_r($matches); ?> 

Вывод:

  Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008 ) 

Проверьте руководство по php

int preg_match (строка $ pattern, string $ subject [, array & $ matches [, int $ flags [, int $ offset]]])

Если указаны совпадения, то они заполняются результатами поиска. $ matches [0] будет содержать текст, совпадающий с полным шаблоном, $ matches 1 будет иметь текст, сопоставляемый с первым захваченным скобкой в ​​скобках и т. д.

 $subject = "E:contact@customer.com I:100955"; $pattern = "/^E:(?<contact>\w+) I:(?<id>\d+)$/"; if (preg_match($pattern, $subject,$matches)) { print_r($matches); } 

Вы можете просто изменить текущее regexp, чтобы захватить все после того, как двоеточие до первого места:

 $subject = "E:contact@customer.com I:100955"; $pattern = "/^E:([^ ]+)/"; if (preg_match($pattern, $subject, $m)) { echo "Yes, A Match"; } $email = $m[1]; 

Если вы не знакомы с regexp, [^ ]+ означает «любой символ, а пробел», и он не требует наличия пространства для работы. Если по какой-либо причине вход меняется на «E: email@host.tld» без бита «I: 12345» , он все равно будет работать.

Используйте параметр соответствия функции preg_match следующим образом:

Матчи:
Если указаны совпадения, то они заполняются результатами поиска. $ matches [0] будет содержать текст, сопоставляемый с полным шаблоном, $ matches [1] будет иметь текст, который соответствует первому захваченному подшаблону в скобках и т. д.