请检查以下内容:
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // prints @example.com
有没有办法可以在没有.com的情况下返回@example?
所以,基本上我需要在字符串中搜索一组我不知道的字符,这些字符存在于我知道的一组字符之间。
所以,在下面我要回“狗”:
$ string =“我以前有一只叫做斑点的宠物狗”;
我可以使用以下方法获取字符串的最后一部分:
$pet_type = strstr($string, 'pet ');
这可能吗?
答案 0 :(得分:2)
或使用2次爆炸
$email = 'name@example.com';
$email = explode( '@', $email);
$email = explode('.', $email[1]);
$email = $email[0];
echo $email;
返回:示例
答案 1 :(得分:1)
您自己在标签中回答了这个问题。使用regex/preg_match,您可以查找模式并提取匹配的值。
关于正则表达式的Here's an introduction,它看起来相当令人生畏,但不是神圣的,这是非常合乎逻辑的:)
对于您使用域名的示例,您可以执行以下操作:
preg_match("@[^\.]+", $email, $matches);
$domain = $matches[0];
答案 2 :(得分:0)
尝试substr()
结合strpos()
$start = strpos($email, '@');
$length = strpos($email, '.com') - $start;
$domain = substr($email, $start, $length);
答案 3 :(得分:0)
$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;
答案 4 :(得分:0)
我经常使用它,因为它使常规的表达更加简单。 你可以将^添加到一个范围来反转它。 [^ aeiou]是所有字符的范围,但是a,e,i,o和u。
对于您的示例,请尝试
@[^\.]+
这将匹配“@example”。
答案 5 :(得分:0)
你可以尝试:
$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
答案 6 :(得分:0)
您需要正则表达式。
preg_match('/@(\w+)\.com/', $email, $match);
$domain = $match[1];
请参阅:http://www.php.net/manual/fr/book.pcre.php
基本上,在preg_match()
调用中,我正在测试字符串$email
是否具有以下序列:at符号,然后是使用括号在组中捕获的任何正数字字符({ {1}}),然后是一个点(转义:(\w+)
),最后是\.
。如果匹配成功,则捕获组将放入com
数组中,并可使用其从左到右的位置索引进行检索。
匹配模式可以根据输入中预期的字符类型进行改进。整体REGEX比简单的字符串替换慢,但更强大。值得了解它们的工作原理。
答案 7 :(得分:0)
preg_match('/\@([a-zA-Z0-9-]+)?/', 'test@site-test.com', $matches);
Array ( [0] => @site [1] => site )
$matches[0]
是你想要使用的。