正则表达式中的Tilde运算符

时间:2009-06-02 06:10:10

标签: php regex pcre

我想知道正则表达式中代字号运算符的含义。

我有这样的声明:

if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
    $warnings[] = 'ISBN should be 10 digits';
}

我发现这个文件解释了代字号的含义:~

它说=~是一个perl运算符,意味着对这个正则表达式运行这个变量。

但为什么我的正则表达式包含两个波浪号运算符?

2 个答案:

答案 0 :(得分:57)

在这种情况下,它只是用作分隔符。

通常,在PHP中,正则表达式的第一个和最后一个字符是“分隔符”,用于标记匹配部分的开始和结束位置(如果您想在末尾添加修饰符,如ungreedy等)< / p>

通常,PHP从字符串中的第一个字符开始,这个字符串是一个正则表达式,匹配第二个字符串作为第二个分隔符。这在文本中出现正常分隔符时很有用(例如,文本中出现/) - 这意味着您不必做笨拙的事情。

匹配“//”并将分隔符设置为“/

  

/\/\//

使用“//”的分隔符匹配“#

  

#//#

答案 1 :(得分:7)

在这种情况下,它没有任何意义。它只是界定模式的开始和结束。在PCRE(Perl兼容正则表达式)中,这是你在PHP中使用preg_ *时所使用的,模式是在表达式选项的旁边输入的,如下所示:

preg_match("/pattern/opt", ...);

但是,在这种情况下使用“/”作为分隔符是任意的 - 尽管正斜杠很受欢迎,但它可以替换为任何东西。在你的情况下,它是波浪形的。