一个正则表达式问题

原创 2015年11月19日 18:42:22

(?:(\w+\.){0,1})(\b(?!www\b)\w+)\.\b(?!(com|org|gov|net|cn)\b)\w+.\w+
一个网友问的问题,稍微有点复杂。
主要其实就是?: 和?!


?:是一个group construct,组构造。
参与匹配是肯定的,但是不会参与组计数。
也就是也许后续你可能会用\1\2来表示某个group时(?:)中的这一块将无法被引用到。同时也看到这个组的官方术语是non-capturing group。很多代码在进行匹配成功后,是能通过\$1, \$2在代码逻辑中被引用的,所以你引用的序号自然就需要把non-capturing group排除掉。比如:

if (#host ~* "(?:(\w+.){0,1})(\b(?!www\b)\w+).\b(?!(com|org|gov|net|cn)\b)\w+.\w+" ) {
set #subdomain "/$2"
}


其实(?!)的含义也是group,只是含义刚好相反,不能是某个字串。
单个字符有取反[^abc]
但是(?!abc)有点特殊的是,一般都需要前面有东西匹配到。
比如looks(?!good)就不能匹配”looksgood”中的”looks”。
如果只是写(?!good) 不会匹配到任何字符串。
同样不允许匹配的字串可以有多个:
iam(?!looks|good)就不能匹配到”iamlooksgood”中的iam。

版权声明:

相关文章推荐

javascript正则表达式中的一个奇葩问题 有关于参数g

今天在写一个表单验证的时候,发现了一个很奇怪的问题,在用正则去匹配一个电话号码的时候,奇数次验证会返回true,偶数次会返回false; 上图 这是注释掉一部分后的代码 这是正则...

使用PHP正则表达式时的一个问题

在学习PHP正则表达式时,遇到的

黑马程序员_学习笔记4 IO流以及正则表达式解决一个传智播客的问题

---------------------- android培训、java培训、期待与您交流! ----------------------     今天主要复习了之前学到的IO流的输入与输出正则表...

关于正则表达式分组的一个问题

先来看一段php代码: <?php $pattern = '/(\d+\.?)+/'; //regular expression $string = '192.168.210'; if (p...

参考<<精通正则表达式>>一书对我们ETL log解析模块一个正则的优化

一句话需求:从ETL的log中提取出来一个ETL脚本落地了哪些临时表,日常数据库运维需要这些数据。 经过python程序处理后,提取到了如下的信息,这些在脚本中DELETE的都是临时表。 DE...

正则表达式入门知识+用它实现在一个网页中获取所有的链接地址

概念:正则表达式是一种计算机科学的概念、它通常用来检索和替换那些符合规则的文本或者字符串。现在很多的程序设计语言计都支持利用正则表达式来进行字符串的操作,有java、c++、python、javasc...
  • lu93it
  • lu93it
  • 2016-09-14 08:55
  • 1781
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)