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


PHP find string within known characters

请检查以下内容:

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

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

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

所以,在下面我想返回"狗":

$string ="我曾经养过一只名叫斑点的宠物狗";

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

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

这可能吗?

或使用 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];

尝试substr()strpos()结合使用

$start = strpos($email, '@');
$length = strpos($email, '.com') - $start;
$domain = substr($email, $start, $length);
$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;

我经常使用它,因为它使常规练习变得更加简单。您可以将 ^ 添加到 A 范围以反转它。[^aeiou] 是除 a、e、i、o 和 u 之外的所有字符的范围。

对于您的示例,请尝试

@[^'.]+

这将匹配"@example"。

你需要正则表达式

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比简单的字符串替换慢,但功能强大得多。值得学习它们的工作原理。

preg_match('/'@([a-zA-Z0-9-]+)?/', 'test@site-test.com', $matches);
Array ( [0] => @site [1] => site )

$matches[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