PHP在已知字符中查找字符串

时间:2012-08-17 13:03:19

标签: php preg-match strstr

请检查以下内容:

$email  = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // prints @example.com

有没有办法可以在没有.com的情况下返回@example?

所以,基本上我需要在字符串中搜索一组我不知道的字符,这些字符存在于我知道的一组字符之间。

所以,在下面我要回“狗”:

$ string =“我以前有一只叫做斑点的宠物狗”;

我可以使用以下方法获取字符串的最后一部分:

$pet_type = strstr($string, 'pet ');

这可能吗?

8 个答案:

答案 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]是你想要使用的。