正则表达式中的那些字符是什么


What are those characters in a regular expression?

我发现这个正则表达式可以正常工作,但我不明白#(在开始时(和表达式结束时是什么。不是^$开头/结尾字符吗?

preg_match_all('#^/([^/]+)/([^/]+)/$#', $s, $matches);

谢谢

匹配模式包含许多/,因此#被用作正则表达式。这些是相同的

/^something$/

#^something$#

如果您的模式中有多个/,则第二个示例更适合避免使用'/进行丑陋的遮罩。以下是 RE 希望使用标准//语法的方式:

/^'/([^'/]+)'/([^'/]+)'/$/

关于#

这是正则表达式本身的分隔符。它的唯一含义是告诉表达式使用哪个分隔符。通常使用/,但其他也可以使用。PCRE 表达式需要一个带有 preg_matchpreg_match_all 的分隔符。

关于^

在字符类([...](中,如果^是第一个字符,则具有"not"的含义。

[abc]   :  matching a, b or c
[^abc]  :  NOT matching a, b or c, match every other character instead

这里开头和结尾的 # 也是自定义正则表达式分隔符。而不是通常的/.../你有#...#.就像perl一样。

这些是分隔符。 您可以使用所需的任何分隔符,但它们必须出现在正则表达式的开头和结尾。

有关正则表达式的详细信息,请参阅此文档:http://www.php.net/manual/en/pcre.pattern.php

你几乎可以使用任何东西作为分隔符。最常见的是 /.../ ,但如果模式本身包含 / 并且您不想转义任何和所有出现,则可以使用不同的分隔符。我个人的偏好是(...),因为它提醒我,结果$0是整个模式。但是你可以做任何事情,<...>#...#%...%{...}...好吧,几乎任何东西。我不知道确切的要求是什么,但我认为它是"任何非字母数字字符"。

让我分解一下:

# 是第一个字符,所以这是用作正则表达式分隔符的字符 - 我们知道当我们到达下一个(未转义的(其中一个字符时,我们必须走到最后

^字符类之外,这意味着字符串的开头

/只是一个普通的"斜杠"字符

([^/]+) 这是一个带括号的表达式,包含至少一个 ( +( 个不是/的字符的实例(^在字符类的开头反转字符类 - 这意味着它只会匹配不在此列表中的字符(

再次/

再次([^/]+)

再次/

$匹配字符串的末尾

#这是最后的分律,所以我们知道正则表达式现在已经完成。