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


What are the forward slashes in regex functions used for?

为什么用于PHP的preg_match和其他语言的其他regex函数在表示要搜索的模式的字符串中有像//这样的分隔符?

我几乎没有使用regex的经验,但使用其中两个分隔符来表示pattern字符串的开始和结束的原因对我来说并不明显,因为您可以只使用字符串的开头和结束。

一般来说,反斜杠是转义符。它们去除了角色的重要性,从而使角色被视为其字面上的样子。在其他情况下,反斜杠将ADD意义添加到字符,将其转换为元字符。例如在正则表达式中:

/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在第三个正则表达式中,它是模式的第一个字符,因此它是分隔符。这意味着,如果您使用该正则表达式在文本中查找"f",则需要转义该f('f(,以便将内部f视为只是一个f,而不是模式分隔符

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

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

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