В 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] будет иметь текст, который соответствует первому захваченному подшаблону в скобках и т. д.