正则表达式中的Tilde运算符

Kei*_*hly 51 php regex pcre

我想知道正则表达式中tilde运算符的含义是什么.

我有这样的声明:

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

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

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

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

Mez*_*Mez 59

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

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

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

匹配" //"并将分隔符设置为" /"

/\/\//

匹配的" //"用分隔符" #"

#//#

  • ic,我已经习惯了/ delimiter所以我对〜分隔符有点困惑.谢谢你的澄清. (3认同)

Nic*_*ick 7

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

preg_match("/pattern/opt", ...);
Run Code Online (Sandbox Code Playgroud)

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