为什么用于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的语法。
所以我认为这些分隔符是用于历史目的的。