正则表达式中的波浪号运算符
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 的意思;)以上是关于正则表达式中的波浪号运算符的主要内容,如果未能解决你的问题,请参考以下文章