PHP найти строку в известных символах
Пожалуйста, проверьте следующее:
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // prints @example.com
Есть ли способ вернуть @example без.com?
Итак, в основном мне нужно искать в строке набор символов, которые я не знаю, которые существуют между набором символов, которые я действительно знаю.
Итак, в следующем я хочу вернуть "собаку":
$ string = "Раньше у меня была домашняя собака с именем spot";
Я могу получить последний раздел строки, используя:
$pet_type = strstr($string, 'pet ');
Это возможно?
8 ответов
Или использовать 2 раза взорваться
$email = 'name@example.com';
$email = explode( '@', $email);
$email = explode('.', $email[1]);
$email = $email[0];
echo $email;
возвращает: пример
Вы сами отвечаете на вопрос в тегах. Используя regex/preg_match, вы можете искать шаблоны и извлекать соответствующие значения.
Вот введение в регулярные выражения, оно может выглядеть довольно устрашающе, но не будьте священным, это вполне логично:)
Для вашего примера с доменом вы можете сделать что-то вроде этого:
preg_match("@[^\.]+", $email, $matches);
$domain = $matches[0];
Я часто использую это, потому что это делает регулярные выражения намного проще. Вы можете добавить ^ в диапазон, чтобы инвертировать его. [^aeiou] - это диапазон ВСЕХ символов, кроме a, e, i, o и u.
Для вашего примера попробуйте
@[^\.]+
Это будет соответствовать "@example".
$email = 'name@host.com';
$at_pos = strpos($email, '@');
$dot_pos = strpos($email,'.');
$domain_length = $dot_pos - $at_pos;
$domain = substr($email,$at_pos,$domain_length);
echo $domain;
preg_match('/\@([a-zA-Z0-9-]+)?/', 'test@site-test.com', $matches);
Array ( [0] => @site [1] => site )
$matches[0]
это то, что вы хотите использовать.
Пытаться substr()
в сочетании с strpos()
$start = strpos($email, '@');
$length = strpos($email, '.com') - $start;
$domain = substr($email, $start, $length);
Вам нужны регулярные выражения.
preg_match('/@(\w+)\.com/', $email, $match);
$domain = $match[1];
Смотрите: http://www.php.net/manual/fr/book.pcre.php
В основном в preg_match()
позвоните, я проверяю, если строка $email
имеет следующую последовательность: символ at, затем любое положительное число символов слова, захваченных в группе с помощью скобок ((\w+)
), затем точка (сбежала: \.
) и наконец, com
, Если совпадение прошло успешно, группы захвата помещаются в $match
массив и может быть получен с использованием их индекса позиции слева направо.
Шаблон соответствия может быть улучшен в зависимости от типа символов, которые вы ожидаете при вводе. В целом, REGEX'ы медленнее, чем простые замены строк, но намного, намного мощнее. Стоит узнать, как они работают.
Вы можете попробовать:
$str = '';
$email = 'name@example.com';
$domain = strstr($email, '@');
$domain = str_split($domain);
foreach($domain as $split){
$str .= $split;
if($split == '.'){
break;
}
}
echo $str; // prints @example
или же:
$email = 'name@example.com';
$email = strstr($email, '@');
$email = explode(".", $domain);
echo $email[0]; // prints @example