我发现这个正则表达式正常但我不明白什么是#
(在开始时)和表达式的结尾。 ^
和$
不是开头/结尾字符吗?
preg_match_all('#^/([^/]+)/([^/]+)/$#', $s, $matches);
由于
答案 0 :(得分:3)
匹配的模式包含许多/
,因此#
用作正则表达式分隔符。这些是相同的
/^something$/
和
#^something$#
如果您的模式中有多个/
,则第二个示例更适合避免使用\/
进行丑陋屏蔽。这就是RE希望使用标准//
语法的方式:
/^\/([^\/]+)\/([^\/]+)\/$/
答案 1 :(得分:1)
关于#
:
这是正则表达式本身的delimiter。它的唯一含义是告诉表达式使用哪个分隔符。通常使用/
,但其他人是可能的。 PCRE表达式需要包含preg_match
或preg_match_all
的分隔符。
关于^
:
在character classes([...]
)内,^
具有不是的含义,如果它是第一个字符。
[abc] : matching a, b or c
[^abc] : NOT matching a, b or c, match every other character instead
答案 2 :(得分:0)
此处的开头和结尾处的#是自定义正则表达式分隔符。而不是通常/.../
你有#...#
。就像perl。
答案 3 :(得分:0)
这些是分隔符。您可以使用任何所需的分隔符,但它们必须出现在正则表达式的开头和结尾。
请参阅此文档以获取有关正则表达式的详细信息: http://www.php.net/manual/en/pcre.pattern.php
答案 4 :(得分:0)
你可以使用几乎任何东西作为分隔符。最常见的是/.../
,但如果模式本身包含/
并且您不想转义任何和所有匹配项,则可以使用不同的分隔符。我的个人偏好是(...)
,因为它提醒我$0
结果是整个模式。但你可以做任何事情,<...>
,#...#
,%...%
,{...}
......好吧,几乎任何事情。我不知道具体要求是什么,但我认为它是“任何非字母数字字符”。
答案 5 :(得分:0)
让我分解一下:
#
是第一个字符,所以这是用作正则表达式的分隔符的字符 - 我们知道当我们到达下一个(未转义的)其中一个
^
在字符类之外,这意味着字符串的开头
/
只是一个普通的'斜线'字符
([^/]+)
这是一个括号中的表达式,其中包含不是 a /(+
开头的任何字符的至少一个(^
)实例字符类反转字符类 - 意味着它只匹配不在此列表中的字符
/
([^/]+)
/
$
这匹配字符串的结尾
#
这是最终的分隔符,所以我们知道正则表达式现已完成。