在php中试用正则表达式。有人可以解释为什么正则表达式"/^[^0-9][A-Z]$/"
必须开始并以正斜杠结束?这是因为这是正则表达式的开始和结束方式吗?
<?php
$string1 = "aA";
if(preg_match("/^[^0-9][A-Z]$/",$string1)){
echo "Match";
}else{
echo "No Match";
}
?>
答案 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的任意分隔符。