用于正则表达式函数的正斜杠是什么?

时间:2014-07-08 21:40:29

标签: php regex

为什么PHP的preg_match和其他语言的其他正则表达式函数在字符串中都有//这样的分隔符,表示要搜索的模式?

我几乎没有使用正则表达式的经验,但是有两个这样的分隔符表示pattern字符串的开头和结尾的原因对我来说并不明显,因为你可以只使用它的开头和结尾字符串。

2 个答案:

答案 0 :(得分:0)

一般来说,反斜杠是逃避。他们从一个角色中删除了重要性,以便将角色视为它的字面意义。在其他情况下,反斜杠添加了对char的重要性,将其转换为元字符。例如在正则表达式中:

/d/   - look for a character "d"
/\d/  - look for a digit: 0,1,2,3,4,5,6,7,9, aka [0-9] - adding significance
/\\/  - look for a literal \ char - REMOVING significance

//是正斜杠。它们只是默认的标准分隔符,因为它们是Perl中使用的标准分隔符,PHP实现了PCRE - Perl兼容的正则表达式。

$m =~ /d/  - perl for matching a "d" character in a string
$m =~ /\d/ - perl for matching a digit

在PHP中,因为正则表达式只是字符串而不是核心语言的一部分,所以您可以使用任何所需的分隔符。模式中的第一个字符变为分隔符:

preg_match('/foo/', $str)   #1, using / forward slashes as delimiter
preg_match('|foo|', $str)   #2, using | pipes as delimiters 
preg_match('f\foof', $str)  #3, using the letter F as delimiter

现在请注意,您可以使用任何所需的字符。 f在第3个正则表达式是模式的第一个字符,所以它是分隔符。这意味着如果您使用该正则表达式在文本中查找“f”,则需要转义该F(\f),以便内部F被视为仅仅是f,而不是模式分隔符

答案 1 :(得分:0)

PHP正在使用Perl风格的正则表达式,所以我想,Perl'发明了'这种语法。

这些分隔符用于向正则表达式添加某些修饰符。当然PHP也可以在函数调用中使用标志或类似的东西来执行此操作,但这会改变Perl的语法。

所以我认为这些分隔符用于历史目的。