检查字符串是否包含字符串末尾的一组字符

时间:2016-01-15 06:26:53

标签: php regex string preg-match

我有一个简单的问题,但已成为一个棘手的问题:

$variable="This is some text***";

if (strpos($variable,'*') !== false) {
   echo 'found *';
} else {
   echo 'not found *';
}

但无论有多少*,它都会在文本中找到*

我想让它只能通过搜索指定的星星,***(三颗星)而不是*(一颗星)才能找到。

1 个答案:

答案 0 :(得分:4)

为了使它更加严格匹配,你只希望它匹配字符串末尾包含***的字符串,你可以使用正则表达式,所以,

if (preg_match('~[^*]\*{3}$~', $str)) {
    print "Valid";
}

这说的是当一根弦最后有三颗星并且在这三颗星之前没有星号的情况下它就是真的。将3更改为21或您要匹配的任意数量的星标。

[^*]意味着可能有一个角色,但它不能是一颗明星,后面跟着3颗星。 \*{3}表示它将匹配3颗星。反斜杠用于避免模式匹配的星号,3是总星数。

它可能是这样的函数:

function starMatch($str, $count) {
    return (bool)preg_match('~[^*]\*{'.$count.'}$~', $str);
}

并且这样称呼:

starMatch($str, 1);  // matches *
starMatch($str, 2);  // matches **
starMatch($str, 3);  // matches ***