Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP查找已知字符内的字符串_Php_Preg Match_Strstr - Fatal编程技术网

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)