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

Posted

技术标签:

【中文标题】正则表达式中的波浪号运算符【英文标题】:Tilde operator in Regular expressions 【发布时间】:2010-10-30 14:25:18 【问题描述】:

我想知道正则表达式中波浪号是什么意思。

我有这样的声明:

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

我找到了解释波浪号含义的文档:~

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

/\/\//

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

#//#

【讨论】:

ic,我习惯了 / 分隔符,所以我对 ~ 分隔符有点困惑。感谢您的澄清。 这仅适用于 PCRE docs.php.net/manual/en/book.pcre.php 而不是 POSIX ERE docs.php.net/manual/en/book.regex.php【参考方案2】:

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

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

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

【讨论】:

哦,好吧..我从书中得到了正则表达式..他们没有解释它的含义。所以有点迷茫。我只是想澄清事情,因为我很困惑。谢谢! '/' 很受欢迎,因为它是 perl 正则表达式的标准分隔符,这就是 preg 的意思;)

以上是关于正则表达式中的波浪号运算符的主要内容,如果未能解决你的问题,请参考以下文章

nginx位置波浪号

正则表达式匹配字符周围的字符,正则表达式中的AND运算符?

正则表达式 - 从字符串中提取电话号码

是否有与 Java 正则表达式中的交集 (&&) 运算符等效的 JavaScript 正则表达式?

MySQL中的Like和正则表达

正则表达式如何匹配+号?