模式参数的preg_replace函数中的#和/之间的区别?

时间:2011-07-10 06:00:16

标签: php preg-replace

#符号的作用与/?

不同
$output = preg_replace('#[^A-Za-z0-9]#i', '', $input);
$output = preg_replace('/[^A-Za-z0-9]/i', '', $input); 

我在/ [^ A-Za-z0-9] /?

之后做了什么字母

^是什么意思?

3 个答案:

答案 0 :(得分:4)

在某些语言中,无论什么类型的字符开始或结束正则表达式的模式部分都无关紧要,只要它在开头和结尾都是相同的(我相信这是Perl的保留,可以说是第一个伟大的正则表达式语言)。由于PHP遵循这一思路,#/是等效的。

  • i =“使此搜索不区分大小写”
  • [^...] =排除方括号之间的所有内容(^在此上下文中基本上表示“排除”)。

您可以学习很多关于正则表达式here的内容。

答案 1 :(得分:2)

这只是一个不同的分隔符。如果你要在你的正则表达式中使用斜杠,你不希望每次都要逃避它,所以你分配一个哈希(或其他字符,有很多可供选择)作为分隔符,这样它不需要逃脱。

正则表达式末尾的i是一个修饰符,告诉PHP在执行匹配时忽略大小写。即字符Aa是等效的。使用i修饰符时,无需使用A-Za-z,因为a-z包含在无壳A-Z匹配中。

当用作字符列表中的第一个字符时,克拉(即^)表示匹配该列表中的任何内容)。所以[^ abc]匹配任何字符abc

答案 2 :(得分:0)

^匹配字符串中的起始位置。在基于行的工具中,它匹配任何行的起始位置。 您可以在javascript中使用this tool来查看差异:

这些在正则表达式中非常重要 '*','+'和'?',表示字符或序列的次数 字符可能会出现。

'*'表示“零或更多”

'+'表示“一个或多个”

'?'意思是“零或一”

我也喜欢这个tutorial