正则表达式中的波浪号运算符

2022-08-30 09:52:53

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

我有这样一句话:

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

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

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

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


答案 1

在本例中,它只是用作分隔符。

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

通常,PHP从字符串中的第一个字符中算出这一点,该字符串表示正则表达式,将其第二次出现匹配为第二个分隔符。这在文本中出现正常分隔符(例如,文本中出现的 )时非常有用 - 这意味着您不必做尴尬的事情。/

在分隔符设置为 “ 的情况下匹配 ””///"

/\/\//

将 “” 与 “ 的分隔符进行匹配//#"

#//#


答案 2

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

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

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


推荐