使用PHP拆分此字符串的最简单方法是什么?

使用PHP拆分此字符串的最简单方法是什么?,php,Php,我有下面的PHP字符串 :guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP 我需要从字符串中创建以下变量: $nick = guest $user = lbjpewueqi $host = AF8A326D.E0B4A40D.F85DC93A.IP 执行此操作的最佳功能是什么 理想情况下,我希望创建某种函数,这样我就可以将字符串和我想要返回的部分传递给它 例如: 也许这段代码对你有帮助 $p = '/[:!@]/'; $s = ":guest!lb

我有下面的PHP字符串

:guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP
我需要从字符串中创建以下变量:

$nick = guest
$user = lbjpewueqi
$host = AF8A326D.E0B4A40D.F85DC93A.IP
执行此操作的最佳功能是什么

理想情况下,我希望创建某种函数,这样我就可以将字符串和我想要返回的部分传递给它

例如:


也许这段代码对你有帮助

$p = '/[:!@]/';
$s = ":guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP";
print_r( preg_split( $p, $s ), 1 );

下面的内容应该符合您的要求

$pattern = "/[:!@]/";
$subject = ":guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP";
print_r(preg_split($pattern, $subject));
该模式指定了要拆分的字符,因此理论上,如果需要考虑传入的不同字符串的其他实例,那么这里可以有任意数量的字符

要返回值而不是仅打印到屏幕,请使用以下命令:

$pattern = "/[:!@]/";
$subject = ":guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP";
$result = preg_split($pattern, $subject));

$nick = $result[1];
$user = $result[2];
$host = $result[3];

您可以声明如下函数:

$s = ":guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP";

function stringToPart($str, $part) {
    $pat['nick'] = '/:(.*)!/';
    $pat['user'] = '/.*!(.*)@/';
    $pat['host'] = '/@(.*)/';

    preg_match($pat[$part], $str, $m);
    if (count($m) > 1) return $m[1];
    return null;
}

echo stringToPart($s,'nick')."\n";
echo stringToPart($s,'user')."\n";
echo stringToPart($s,'host')."\n";
另一个版本:

function stringToPart($string, $part) {
    if (preg_match('/^:(.*)!(.*)@(.*)/', $string, $matches)) {
        $nick = $matches[1];
        $user = $matches[2];
        $host = $matches[3];
        return isset($$part) ? $$part : null;
    }
}

比preg_split解决方案更严格-它检查分离器顺序。

看看preg_split,你可以看看explode函数,不过你需要使用它3次。另一方面,如果你发布一个你尝试过的例子,以及你遇到的错误/问题,通常会有助于获得更快的响应。你可能不需要拆分字符串,对吧?您必须拆分许多不同的字符串,它们都共享一些通用的格式规则。解释这些规则。没有它,我们只能猜测一个可能对你有帮助,也可能没有帮助的解决方案。最好的办法可能是使正则表达式匹配不被分割:如果$match=preg_match'???',$string echo$match[1]。。谢谢你的回答,我接受了。我用它就像用stringToPart$什么的,尼克;但我得到了PHP的注意:使用未定义的常量nick-假定为'nick'。我用的是吗?是的,$part参数是一个字符串,您必须使用or'声明字符串。f、 “尼克”或“尼卡”,我错了!
<?php
function stringToPart($string, $key)
{
    $matches = null;
    $returnValue = preg_match('/:(?P<nick>[^!]*)!(?P<user>.*?)@(?P<host>.*)/', $string, $matches);
    if (isset($matches[$key]))
    {
        return $matches[$key];
    } else
    {
        return NULL;
    }
}

$string = ':guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP';
echo stringToPart($string, "nick");
echo "<br />";

echo stringToPart($string, "user");
echo "<br />";

echo stringToPart($string, "host");
echo "<br />";
?>
function stringToPart($string, $part) {
    if (preg_match('/^:(.*)!(.*)@(.*)/', $string, $matches)) {
        $nick = $matches[1];
        $user = $matches[2];
        $host = $matches[3];
        return isset($$part) ? $$part : null;
    }
}
<?php
function stringToPart($string, $key)
{
    $matches = null;
    $returnValue = preg_match('/:(?P<nick>[^!]*)!(?P<user>.*?)@(?P<host>.*)/', $string, $matches);
    if (isset($matches[$key]))
    {
        return $matches[$key];
    } else
    {
        return NULL;
    }
}

$string = ':guest!lbjpewueqi@AF8A326D.E0B4A40D.F85DC93A.IP';
echo stringToPart($string, "nick");
echo "<br />";

echo stringToPart($string, "user");
echo "<br />";

echo stringToPart($string, "host");
echo "<br />";
?>