如何检测正则表达式是否有任何匹配?

时间:2016-02-15 16:09:50

标签: javascript php regex

我有这个正则表达式:

function test($str){
    return preg_replace('~[^0-9a-z]+~i', '-',$str);
}

以下是两个例子:

一:

$str = "this is a str!";
echo test($str);
//=> this-is-a-str

如您所见,该正则表达式用-替换白色间距并删除!。现在需要获得true,因为正则表达式符合某些内容。

两个

$str = "this-is-a-str";
echo test($str);
//=> this-is-a-str

如您所见,输出和输入是相同的,这意味着在这种情况下正则表达式不会替换任何内容。现在我需要false

其实我正试图找一个正则表达式检查器:) ..!类似于JavaScript中的match()。有没有PHP功能呢?

2 个答案:

答案 0 :(得分:2)

要测试模式是否匹配,您必须使用preg_match

function test( $str )
{
    $pattern = '~[^0-9a-z]+~i';
    if( preg_match( $pattern, $str ) )
    {
         return preg_replace( $pattern, '-', $str );
    }
    else return FALSE;
}

编辑:

您还可以使用count参数来检查替换:

function test( $str )
{
    $pattern = '~[^0-9a-z]+~i';
    $retval = preg_replace( $pattern, '-', $str, -1, $count );
    if( $count ) return $retval;
    else         return FALSE;
}

$count参数返回替换次数。

答案 1 :(得分:0)

您可以与原始字符串进行比较,以确定某些内容是否发生了变化。

COPY

此外,您应该考虑使用此正则表达式:

$str = "this is a str!";

var_dump(preg_replace('~[^0-9a-z-]+~i', '-', $str) === $str);
//=> bool(false)

$str = "this-is-a-str";

var_dump(preg_replace('~[^0-9a-z-]+~i', '-', $str) === $str);
//=> bool(true)

在否定字符类中添加连字符,因为您不想单独替换连字符。