Регулярное выражение для поиска текста между знаком «меньше» и «больше» - PullRequest
1 голос
/ 20 декабря 2011

Итак, я попробовал это регулярное выражение:

$email = '';
preg_match('<.*?>', 'sadfas<email@email.com>', $email);
echo $email[0];

Целевым результатом является извлечение 'email@email.com', так как оно находится между знаком <и> ... но это не сработало ...

Что я сделал не так?

Ответы [ 3 ]

4 голосов
/ 20 декабря 2011

Вы забыли разделители регулярных выражений (/ - популярный разделитель). Вам также следует использовать подшаблон для сопоставления только адреса, а не <>:

preg_match('/<(.*?)>/', 'sadfas<email@email.com>', $email);
echo $email[1];

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

preg_match('/(?<=<).*?(?=>)/', 'sadfas<email@email.com>', $email);
echo $email[0];
3 голосов
/ 20 декабря 2011

Вам необходимо:

  1. разделить ваше регулярное выражение
  2. создать группу захвата для битов, которые вы хотите

Код:

<?php
$email = '';
preg_match('/<(.*?)>/', 'sadfas <email@email.com>', $email);
print_r($email);
?>

test:

% php foo.php
Array
(
    [0] => <email@email.com>
    [1] => email@email.com
)

Обратите внимание, что фактическое поле, которое вы хотите, находится в $email[1]

1 голос
/ 20 декабря 2011

Попробуйте вместо этого этот код:

preg_match('/<(.*)?>/', 'sadfas<email@email.com>', $email);
echo $email[1];
  1. Вам нужно заключить результаты в круглые скобки, чтобы вернуть совпадение.
  2. Добавить разделитель шаблона в совпадение PHP (я использую/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...