我发现这个正则表达式正常工作,但我不明白什么是#
(在开始时)和表达式的末尾。是不是^
和$
的开始/结束字符?正则表达式中的那些字符是什么?
preg_match_all('#^/([^/]+)/([^/]+)/$#', $s, $matches);
感谢
我发现这个正则表达式正常工作,但我不明白什么是#
(在开始时)和表达式的末尾。是不是^
和$
的开始/结束字符?正则表达式中的那些字符是什么?
preg_match_all('#^/([^/]+)/([^/]+)/$#', $s, $matches);
感谢
匹配的图案包含许多/
,因此#
被用作正则表达式定界符。这些都是相同的
/^something$/
和
#^something$#
如果你有多个/
在你的模式第二个例子是更适合避免\/
丑陋屏蔽。这是RE想怎么像使用标准//
语法:
/^\/([^\/]+)\/([^\/]+)\/$/
它们被称为*定界符*:http:// php。净/手动/ EN/regexp.reference.delimiters.php –
关于#
:
这是正则表达式本身的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
另外#这里到底是自定义的正则表达式的分隔符。而不是通常的/.../
你有#...#
。就像Perl一样。
这些是分隔符。您可以使用任何您想要的分隔符,但它们必须出现在正则表达式的开始和结尾处。
请参阅本文档的详细洞察到正则表达式: http://www.php.net/manual/en/pcre.pattern.php
您可以使用几乎任何东西作为分隔符。最常见的是/.../
,但如果模式本身包含/
并且您不希望转义任何和所有的事件,则可以使用不同的分隔符。我的个人偏好是(...)
,因为它提醒我$0
的结果是整个模式。但你可以做任何事情,<...>
,#...#
,%...%
, {...}
......好吧,几乎任何东西。我并不确切知道需求是什么,但我认为它是“任何非字母数字字符”。
让我把它分解:
#
是第一个字符,因此这是作为正则表达式的分隔符的字符 - 我们知道,当我们到达下一个(转义,我们已经到了结束)这些
^
一个字符类以外的一个,这意味着该字符串的开头
/
仅仅是一个正常的“斜线”字
([^/]+)
这是一个括号内的表达式,其中至少包含一个(+
)不是 a /(^
)的任何字符的实例在字符类的开始处反转字符类 - 意味着它只会匹配不在此字符中的字符列表)
再次
([^/]+)
再次
/
再次
这匹配字符串的末尾
#
这是最后的分隔符,所以我们知道正则表达式现在已经完成。
很好的正则表达式介绍:http://www.regular-expressions.info/和PHP:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php –
http ://www.php.net/manual/en/regexp.reference.delimiters.php和http://www.regular-expressions.info/php.html – mario