匹配字符串与shell样式的通配符(例如,*)

时间:2013-03-14 15:42:26

标签: php string wildcard

是否可以在if语句中使用通配符?

我的代码:

* =通配符

if ($admin =='*@some.text.here') {

}

$admin将是其中之一:

  • xvilo@some.text.here
  • bot!bot@some.text.here
  • lakjsdflkjasdflkj@some.text.here

5 个答案:

答案 0 :(得分:14)

如果您不想使用正则表达式,fnmatch()可能会为此[有限]的目的提供帮助。它使用像您期望的类似shell的通配符来匹配字符串。

if (fnmatch('*@some.text.here', $admin)) {

}

答案 1 :(得分:3)

您可以检查字符串是否以您期望的值结束:

$suffix = '@some.text.here';

if (substr($admin, -strlen($suffix)) == $suffix) {
    // Do something
}

答案 2 :(得分:3)

这是一个通配符功能。
当您希望使用*时,我只会注释掉.(单个字符匹配)。

这将允许您在整个过程中使用通配符:
*xxx - 结束“xxx”
xxx* - 开始“xxx”
xx*zz - 以“xx”开头,以“zz”结尾 *xx* - 中间有“xx”

function wildcard_match($pattern, $subject)
{
    $pattern='/^'.preg_quote($pattern).'$/';
    $pattern=str_replace('\*', '.*', $pattern);
    //$pattern=str_replace('\.', '.', $pattern);
    if(!preg_match($pattern, $subject, $regs)) return false;
    return true;
}
if (wildcard_match('*@some.text.here', $admin)) {

}

但我建议您自己学习regular expressionspreg_match()

答案 3 :(得分:1)

if (strstr ($admin,"@some.text.here")) {

}

使用strstr()它会做你想要的或者指出stristr()

或者你可以使用类似这样的strpos

$pos = strrpos($mystring, "@some.text.here");
if ($pos === false) { // note: three equal signs
    // not found...
} else {
    //found
}

或者从结束(我认为没有测试过)

$checkstring = "@some.text.here";
$pos = strrpos($mystring, $checkstring, -(strlen($checkstring)));
if ($pos === false) { // note: three equal signs
    // not found...
} else {
    //found
}

答案 4 :(得分:0)

检查是否在另一个字符串中找到字符串的最快方法是strpos():

if (strpos($admin, '@some.test.here') !== false) { }

如果您需要确定@ some.text.here在最后发生,那么您将需要使用substr_compare()。

if (substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0) {}