PHP:比较子串

时间:2011-04-12 10:20:17

标签: php string compare

用php快速的noob问题:

我正在尝试创建一个条件语句,我可以检查变量是否与子字符串部分匹配。

在我的案例中更具体:

$ cal是一个文件的名称,我想要它,所以如果$ cal包含“.cfg”,它会回复一些文字。

伪代码:

<?php if ($cal == "*.cfg")
 {
    echo "Hello ";
 }
?> 

5 个答案:

答案 0 :(得分:6)

if (strpos($cal, ".cfg") !== false)
{
  echo "some text";
}

修改

我提议完全匹配“* .cfg”:

$cal = "abc.cfgxyz";
$ext = "cfg";

if (strrpos($cal, ".".$ext) === strlen($cal)-strlen($ext)-1)
{
    echo "matched";
}

答案 1 :(得分:3)

if ( preg_match('/\\.cfg$/',$cal) ) echo "Hello ";

应该这样。 (假设您想匹配输入字符串的结尾,否则,请忽略$

答案 2 :(得分:3)

在这种情况下,您只需使用substr查看$cal的最后四个字符:

if (substr($cal, -4) === '.cfg') {
    echo "Hello ";
}

您应该查看正则表达式以了解更复杂的问题。

答案 3 :(得分:3)

对于简单模式,strpos可以很好地完成。

if (strpos ('.cfg', $string) !== false)
{
    // etc
}

对于更复杂的parterns,你需要preg_match,它可以将字符串与正则表达式进行比较。

if (preg_match ('/.*?\.cfg/', $string))
{
    // etc
}

前者提供更好的性能,但后者更灵活。

答案 4 :(得分:2)

您可以在此处使用各种方法。例如:

$cal = explode('.', $cal);
if(last($cal) === "cfg")) {
    echo "Hello";
}

或使用正则表达式(例如,它可能比使用strpos慢):

if(preg_match("/\.cfg$", $cal)) {
   echo "Hello";
} 

老实说,我不知道explode()版本如何与带有负值(lonesomeday的答案)或strpos()(具有其缺陷,Frosty Z的答案)的substr()进行比较。可能substr()版本是紧固件,而正则表达式是执行此操作的最慢的方法)。