一个正则表达式的看法(?:)

原正则的出现是为了实现apache上传目录无执行权限,不过大家知道在 windows下对于文件名是不区分大小写的,但在*unx下就不同了,其中st0p.php和st0p.Php是两个不同的文件,所以此正则(?i:.php)出现


代码如下:

<Directory "/var/www/upload">
<FilesMatch "(?i:.php)">
Order Allow,Deny
Deny from all
</FilesMatch>
</Directory>

kindle说是参考http://perldoc.perl.org/perlre.html#Extended-Patterns的内容进行写的,具体的内容大家自己看,我们说一下关于此表达式的部分..

我们找到?:相关的部分,其用法有两种(?:pattern)和(?imsx-imsx:pattern)
我们需要用的是后者,前者的话是没法区分大小写的.而后者的用法就是(?标志修饰符:格式)
其中原文中有一句话是Any letters between ? and : act as flags modifiers as with (?imsx-imsx).
这句话就说明了imsx-imsx的作用,标志修饰符
我们看一下刚才出现的正则(?i:.php)
?的作用是在默认的贪婪模式下尽可能多的匹配所搜索的字符串,当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

其中i的作用为忽略大小写
.php就是我们需要匹配的部分,由于?和i的作用,那我们的正则就会在不区分大小写的情况下尽可能多的匹配所搜索的字符串,这样就达到了我们禁用所有.php后缀文件的访问了

当然还有别的参数,更多的内容大家参考一下http://perldoc.perl.org/perlre.html#Extended-Patterns

m
Treat string as multiple lines. That is, change "^" and "$" from matching the start or end of the string to matching the start or end of any line anywhere within the string.

s
Treat string as single line. That is, change "." to match any character whatsoever, even a newline, which normally it would not match.
Used together, as /ms, they let the "." match any character whatsoever, while still allowing "^" and "$" to match, respectively, just after and just before newlines within the string.

i
Do case-insensitive pattern matching.
If use locale is in effect, the case map is taken from the current locale. See perllocale.

x
Extend your pattern's legibility by permitting whitespace and comments.

p
Preserve the string matched such that ${^PREMATCH}, ${^MATCH}, and ${^POSTMATCH} are available for use after matching.

g and c
Global matching, and keep the Current position after failed matching. Unlike i, m, s and x, these two flags affect the way the regex is used rather than the regex itself. See "Using regular expressions in Perl" in perlretut for further explanation of the g and c modifiers.

其中:应该只是一个分隔符吧,不知道还有没有别的作用,如果哪个大牛知道,请告诉我.

.php就是我们要匹配的部分了,从上面的图我们..

(0)

相关推荐

  • 一个正则表达式的看法(?:)

    原正则的出现是为了实现apache上传目录无执行权限,不过大家知道在 windows下对于文件名是不区分大小写的,但在*unx下就不同了,其中st0p.php和st0p.Php是两个不同的文件,所以此正则(?i:.php)出现 复制代码 代码如下: <Directory "/var/www/upload"> <FilesMatch "(?i:.php)"> Order Allow,Deny Deny from all </FilesMa

  • php preg_filter执行一个正则表达式搜索和替换

    preg_filter (PHP 5 >= 5.3.0) preg_filter - 执行一个正则表达式搜索和替换 mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) preg_filter()等价于preg_replace() 除了它仅仅返回(可能经过转化)与目标匹配的结果. 这个函数怎样工作的更详细信息请阅读 preg

  • 一个正则表达式导致CPU 利用率居高不下

    前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%.通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息. 藏在正则表达式里的陷阱,一个正则表达式导致CPU 利用率居高不下 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处.通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法. 很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下.为了弄

  • 请教一个正则表达式,匹配所有Html标签外部的指定字符串

    比如这样一段代码: 软件地图,软件测1试你好<img src="xxx" alt="a测2试">ASDASD测3试<a href="">a测4试b</a> 匹配:(测\d试) 那么我想要的匹配是 测1试 测3试 而不匹配包含在html标签中的 "测2试" 和 "测4试" var s='软件地图,软件测1试你好ASDASD测3试a测4试b' //]+>?[^ // v

  • Java中使用正则表达式的一个简单例子及常用正则分享

    import java.util.Scanner; public class regexTest { // 新建类 public static void main(String[] args){ // 主方法 Scanner sc = new Scanner(System.in); // new Scanner类对象 System.out.println("Please Enter Email:"); String email = sc.nextLine(); System.out.p

  • JavaScript分步实现一个出生日期的正则表达式

    简言 在表单验证中,经常会用正则表达式做出生日期校验.本文把出生日期分割成几个部分,分步地介绍了实现一个出生日期校验的完整过程.相信您在理解了本篇的内容后,对编写正则表达式会有更深入的理解和更强的信心. 我们将一个形式如 2018-06-15 的出生日期分割个年份,月份和日期三个组成部分,分别来编写相应的正则. 1 年份正则 首先给出年份正则表达式的规则定义: 年份由4位数字组成 只接受19,20开头的年份 根据以上规则,很容易写出年份的正则表达式: var pattern = /^(19|20

  • PHP和正则表达式教程集合之一第1/2页

    PHP和正则表达式 一个正则表达式是一个特定的格式化模式,可以用来找出一个字符串在另一个字符串中的使用情况.几个编程语言,包括Visual Basic,Perl,JavaScript和PHP都支持正则表达式,希望在这篇入门指导的结束,Mitchell(作者自己)可以让你在PHP程序中能应用一些基本的正则表达式.正则表达式是在各种各样的程序语言中突出的古怪特征中的一种,但是由于它们看起来是很难的一个概念,所以很多开发者就把它们放到了角落里,忘记了它们的存在. 让我们先来看看什么是正则表达式,为什么

  • JScript中正则表达式用法详解

    呵呵,先罗嗦几句,去年用C#做了一个语法高亮的小东西,根据配制文件中的信息把所给代码格式化成HTML,使它能在网页上显示出和编辑器里一样的语法元素高亮的效果以及支持代码折叠.没错,就是和博客园上看到的类似啦.因为我当时使用的是MSN Space,它没有提供这项功能,只好自己写一个咯. 我使用的是C#进行编写,起初使用的是超级繁琐的for,while,switch,if等基本语句来判断关键字等等,大家莫笑话,本人愚笨当时还不知道正则表达式是何物,所以只能用这种土办法了,当然土办法还是有效果的,只是

  • 55分钟学会正则表达式

    什么是正则 正则表达式是一种用来描述一定数量文本的模式,用来匹配相同规范样式的文本.在JavaScript中用RegExp对象表示正则表达式( 即Regular Eexpression),它是对字符串执行模式匹配的强大工具. 正则表达式是一种查找以及字符串替换操作.正则表达式在文本编辑器中广泛使用,比如正则表达式被用于: 检查文本中是否含有指定的特征词 找出文中匹配特征词的位置 从文本中提取信息,比如:字符串的子串 修改文本 与文本编辑器相似,几乎所有的高级编程语言都支持正则表达式.在这样的语境

  • 55分钟学会正则表达式(来自Github)

    推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:http://www.pyregex.com/ Regexper:http://www.regexper.com/ 正则表达式是一种查找以及字符串替换操作.正则表达式在文本编辑器中广泛使用,比如正则表达式被用于: 检查文本中是否含有指定的特征词 找出文中匹配特征词的位置 从文本中提取信息,比如:字符串的子串 修改文本 与文本编辑器相似,几乎所有的高级编程语言都支持正则表达式.在这样的

随机推荐