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

时间:2011-10-29 12:59:10

标签: php regex

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

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

由于

6 个答案:

答案 0 :(得分:3)

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

/^something$/

#^something$#

如果您的模式中有多个/,则第二个示例更适合避免使用\/进行丑陋屏蔽。这就是RE希望使用标准//语法的方式:

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

让我分解一下:

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

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

/只是一个普通的'斜线'字符

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

再次

/

再次

([^/]+)

再次

/

$这匹配字符串的结尾

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