PHP查找已知字符内的字符串
请检查以下内容:PHP查找已知字符内的字符串,php,preg-match,strstr,Php,Preg Match,Strstr,请检查以下内容: $email = 'name@example.com'; $domain = strstr($email, '@'); echo $domain; // prints @example.com 有没有一种方法可以在没有.com的情况下返回@example 所以,基本上我需要搜索一个字符串,寻找一组我不知道的字符,它们存在于我知道的一组字符之间 因此,在下面我想返回“dog”: $string=“我以前养过一只名叫spot的宠物狗” 我可以使用以下命令获取字符串的最后一部分:
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // prints @example.com
有没有一种方法可以在没有.com的情况下返回@example
所以,基本上我需要搜索一个字符串,寻找一组我不知道的字符,它们存在于我知道的一组字符之间
因此,在下面我想返回“dog”:
$string=“我以前养过一只名叫spot的宠物狗”
我可以使用以下命令获取字符串的最后一部分:
$pet_type = strstr($string, 'pet ');
这可能吗?您自己在标签中回答问题。使用可以查找模式并提取匹配的值 在正则表达式上,它看起来很吓人,但不要太神圣,它很符合逻辑:) 以域为例,您可以执行以下操作:
preg_match("@[^\.]+", $email, $matches);
$domain = $matches[0];
你自己回答标签上的问题。使用可以查找模式并提取匹配的值 在正则表达式上,它看起来很吓人,但不要太神圣,它很符合逻辑:) 以域为例,您可以执行以下操作:
preg_match("@[^\.]+", $email, $matches);
$domain = $matches[0];
尝试将substr()
与strpos()结合使用
尝试将substr()
与strpos()结合使用
或使用2次爆炸
$email = 'name@example.com';
$email = explode( '@', $email);
$email = explode('.', $email[1]);
$email = $email[0];
echo $email;
返回:示例或使用2次分解
$email = 'name@example.com';
$email = explode( '@', $email);
$email = explode('.', $email[1]);
$email = $email[0];
echo $email;
返回:示例我经常使用它,因为它使常规表达式更简单。
您可以将^a添加到范围以反转它。[^aeiou]是除a、e、i、o和u以外的所有字符的范围
举个例子,试试看
@[^\.]+
这将匹配“@example”。我经常使用它,因为它使常规表达式更简单。
您可以将^a添加到范围以反转它。[^aeiou]是除a、e、i、o和u以外的所有字符的范围
举个例子,试试看
@[^\.]+
这将匹配“@example”。您可以尝试:
$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
或:
你可以试试:
$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
或:
您需要正则表达式
preg_match('/@(\w+)\.com/', $email, $match);
$domain = $match[1];
见:
基本上,在preg_match()
调用中,我正在测试字符串$email
是否具有以下序列:一个at符号,然后是使用括号((\w+
)在组中捕获的任何正数字字符,然后是一个点(转义:\.
),最后是com
。如果匹配成功,捕获组将放入$match
数组中,并可使用其从左到右的位置索引进行检索
根据输入中所需的字符类型,可以改进匹配模式。总的来说,正则表达式比简单的字符串替换要慢,但功能要强大得多。值得学习它们的工作原理。您需要正则表达式
preg_match('/@(\w+)\.com/', $email, $match);
$domain = $match[1];
preg_match('/\@([a-zA-Z0-9-]+)?/', 'test@site-test.com', $matches);
Array ( [0] => @site [1] => site )
见:
基本上,在preg_match()
调用中,我正在测试字符串$email
是否具有以下序列:一个at符号,然后是使用括号((\w+
)在组中捕获的任何正数字字符,然后是一个点(转义:\.
),最后是com
。如果匹配成功,捕获组将放入$match
数组中,并可使用其从左到右的位置索引进行检索
根据输入中所需的字符类型,可以改进匹配模式。总的来说,正则表达式比简单的字符串替换要慢,但功能要强大得多。值得学习它们是如何工作的
preg_match('/\@([a-zA-Z0-9-]+)?/', 'test@site-test.com', $matches);
Array ( [0] => @site [1] => site )
$matches[0]
是您想要使用的
$matches[0]
是您想要使用的。您是否希望在@
和.com
之间有任何点?如果适用,这可能会有帮助分解preg\u match
。如果适用,是的。但是2爆炸得到一个域,这时你的代码开始变得凌乱,在厕所里爆炸。你希望@
和.com
之间有点吗?这可能会有帮助爆炸
如果适用。如果适用,是的。但是2爆炸得到一个域,这时你的代码开始变得混乱,它在厕所里爆炸。但是,哪一个会更快…找到以位置x开始,以长度y结束的子字符串,或者搜索正则表达式?我相信正则表达式非常快。在您的解决方案中,您也需要确保“.com”扩展名,但这对OP来说可能不是问题。对于子域(即。mike@john.doe.org)但是,这会更快…找到从位置x开始到长度y结束的子字符串,或者搜索正则表达式?我相信正则表达式非常快。在您的解决方案中,您也需要确保“.com”扩展名,但这对OP来说可能不是问题。对于子域(即。mike@john.doe.org)