2011-10-29 29 views
1

我发现这个正则表达式正常工作,但我不明白什么是#(在开始时)和表达式的末尾。是不是^$的开始/结束字符?正则表达式中的那些字符是什么?

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

感谢

+0

很好的正则表达式介绍:http://www.regular-expressions.info/和PHP:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php –

+0

http ://www.php.net/manual/en/regexp.reference.delimiters.php和http://www.regular-expressions.info/php.html – mario

回答

3

匹配的图案包含许多/,因此#被用作正则表达式定界符。这些都是相同的

/^something$/ 

#^something$# 

如果你有多个/在你的模式第二个例子是更适合避免\/丑陋屏蔽。这是RE想怎么像使用标准//语法:

/^\/([^\/]+)\/([^\/]+)\/$/ 
+3

它们被称为*定界符*:http:// php。净/手动/ EN/regexp.reference.delimiters.php –

1

关于#

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

关于^

character classes[...]),该^有,如果它是第一个字符的意义。

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

另外#这里到底是自定义的正则表达式的分隔符。而不是通常的/.../你有#...#。就像Perl一样。

0

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

0

让我把它分解:

#是第一个字符,因此这是作为正则表达式的分隔符的字符 - 我们知道,当我们到达下一个(转义,我们已经到了结束)这些

^一个字符类以外的一个,这意味着该字符串的开头

/仅仅是一个正常的“斜线”字

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

再次

([^/]+)再次

/再次

这匹配字符串的末尾

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

相关问题