Php 主机掩码匹配

Php 主机掩码匹配,php,regex,irc,Php,Regex,Irc,对于我的IRC机器人,我需要将一个主机掩码与另一个带有通配符的主机掩码进行匹配 例如: 巴勃罗!Pablo@Pablo.users应该匹配:爸?瞧!P?blo@??blo.users 问号表示每个字符和数字 如果可能的话,最好看到它与下面的字符串匹配: 巴勃罗!Pablo@Pablo.users和巴勃罗比赛!Pablo@Pab* 这个!和@总是在主机掩码中 有人能为这个任务创建一个正则表达式吗 我试过了,成功了,但代码庞大,而且常常不准确 谢谢你 我写这篇文章是为了我正在创作的PHPIRCd f

对于我的IRC机器人,我需要将一个主机掩码与另一个带有通配符的主机掩码进行匹配

例如:

巴勃罗!Pablo@Pablo.users应该匹配:爸?瞧!P?blo@??blo.users

问号表示每个字符和数字

如果可能的话,最好看到它与下面的字符串匹配:

巴勃罗!Pablo@Pablo.users和巴勃罗比赛!Pablo@Pab*

这个!和@总是在主机掩码中

有人能为这个任务创建一个正则表达式吗

我试过了,成功了,但代码庞大,而且常常不准确


谢谢你

我写这篇文章是为了我正在创作的PHPIRCd

function match($mask, $expression) {
    $expression = str_replace('\\*', '.+', preg_quote($expression, '/'));
    return preg_match('/^' . $expression. '$/', $mask);
}

你可以这样称呼它:
match('Pablo!Pablo@Pablo“,”Pab*o!*@*blo')
。这可能不是你想要的,但我希望它能让你走上正轨。

当你说“巨大”——什么,100行?5,000? 如果是100行或更少,我建议将其与测试用例一起发布在您的问题中。如果您需要Perl解决方案,可以使用模块中的
matches\u mask()