我需要检查$variable1
的值是LIKE
另一个变量2。
破折号后可能会有其他东西,但我无法预测到什么。在PHP中有没有像sql一样的通配符? LIKE variable%
?
答案 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';
都会返回“是的”。