57

我想知道正则表达式中波浪号运算符的含义是什么。

我有这样的声明:

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

我发现这个文档解释了波浪号的含义:~

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

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

4

2 回答 2

69

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

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

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

匹配“ //”,分隔符设置为“ /

/\/\//

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

#//#

于 2009-06-02T06:15:17.047 回答
8

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

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

但是,在这种情况下使用“/”作为分隔符是任意的——尽管正斜杠很流行,但它可以用任何东西代替。在你的情况下,它是波浪号。

于 2009-06-02T06:18:05.963 回答