检查变量就像PHP中另一个变量的值

时间:2010-11-02 19:03:18

标签: php

我需要检查$variable1的值是LIKE另一个变量2。

破折号后可能会有其他东西,但我无法预测到什么。在PHP中有没有像sql一样的通配符? LIKE variable%

4 个答案:

答案 0 :(得分:5)

如果您只想知道一个字符串是否属于另一个字符串,请使用

  • strpos - 查找第一次出现字符串的位置

因为 (quoting the PHP Manual on preg_match)

  

如果您只想检查另一个字符串中是否包含一个字符串,请不要使用preg_match()。请改用strpos()strstr(),因为它们会更快。

示例:

$haystack = 'foo-bar';
$needle   = 'o-b';
echo (strpos($haystack, $needle) !== FALSE) ? 'yeah' : 'no';

将输出“yeah”,因为“o-b”是“foo-bar”中的子字符串

答案 1 :(得分:3)

嗯,这是一个更强大的选择:

function isLike($haystack, $needle) {
    $regex = '#^'.preg_quote($needle, '#').'$#i';
    //add support for wildcards
    $regex = str_replace(array('%', '_'), array('.*?', '.?'), $regex);
    return 0 != preg_match($regex, $haystack);
}

基本上,它的操作就像MySQL的LIKE一样。它使用%作为“任意字符,任意次数”和_作为“任何字符,零或一次”。

以下是一些例子:

isLike('foobarbaz', 'fooba_ba_'); // true
isLike('foobarbaz', 'ba_ba_'); // false
isLike('foobarbaz', 'foodar'); // false
isLike('foobarbaz', 'foo%baz'); // true
isLike('foobarbaz', '%bar%'); // true

答案 2 :(得分:2)

如果你的意思是variable%字面意思(以匹配字符串的开头),这是preg_match()的情况。

手册中略有修改的例子:

$subject = "This string begins with This";
$pattern = '/^This/';
preg_match($pattern, $subject, $matches);
print_r($matches); 

使用/i修饰符进行不区分大小写的搜索。

答案 3 :(得分:1)

另一种选择是使用

  • fnmatch() - 检查传递的字符串是否与给定的shell通配符模式匹配。

忽略手册中的文件名。它会匹配你扔的任何东西。

示例:

echo fnmatch('foo*', 'foo-bar') ? 'yeah' : 'no';
echo fnmatch('foo-b?r', 'foo-bar') ? 'yeah' : 'no';

都会返回“是的”。