为什么在preg_match()函数中使用/

时间:2017-10-26 23:01:18

标签: php regex

在php中试用正则表达式。有人可以解释为什么正则表达式"/^[^0-9][A-Z]$/"必须开始并以正斜杠结束?这是因为这是正则表达式的开始和结束方式吗?

<?php

$string1 = "aA";

if(preg_match("/^[^0-9][A-Z]$/",$string1)){
    echo "Match";
}else{
    echo "No Match";
}

?>

3 个答案:

答案 0 :(得分:4)

请阅读http://php.net/manual/en/regexp.reference.delimiters.php。一个不必坚持//,可以是##,或++,%%等等。但是,是的,这些是正则表达式的分隔符。

答案 1 :(得分:1)

你是对的。 MDN page on RegEx是一个很好的概述。但请记住,这是JavaScript特定信息,实际结果可能因使用的语言而异。换句话说,并非所有语言都使用或需要斜杠,但很多语言都使用斜杠。

答案 2 :(得分:1)

在回答OP的最后一个问题时,是的,默认情况下 PHP中的正则表达式或正则表达式以正斜杠分隔符开始和结束。至于上一个问题,让我们考虑正则表达式代表什么。它由一种特殊的字符串“......定义一组一个或多个字符串组成。”;见here。在C,Python和Java中,根据此article,可以使用不带分隔符的文字字符串。

Perl是PHP的前身,它为这种模式匹配字符串使用分隔符,默认情况下使用正斜杠作为分隔符。 PHP也采用了这种做法。但是,可以修改这些默认值。 PHP允许使用各种分隔符,仅允许使用“...非字母数字,非反斜杠,非空白”字符;见here

因此,以下所有都是有效的例子:

<?php

$test = "dark gray squirrel";

$r = "!s.+!";

$r2 = "{s.+}";

$r3 = "~s.+~";

preg_match( $r,$test,$matches );
var_dump( $matches );

preg_match( $r2,$test,$matches );
var_dump( $matches );

preg_match( $r3,$test,$matches );
var_dump( $matches );

请参阅live code

有趣的是,Perl提供了比PHP更大的灵活性,因为它支持documentation的任意分隔符。