一个正则表达式问题

原创 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。

C语言正则表达式的匹配问题

题目: C语言正则表达式详解 regcomp() regexec() regfree()详解。 背景: 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其...
  • ljp1919
  • ljp1919
  • 2015年08月18日 21:48
  • 1962

Java正则表达式中的常见问题

转自   Java正则表达式中的常见问题 这篇文章总结了问关于Java正则表达式的热门问题。因为它们是最常见的,你会发现,他们也非常有用。 1,如何从一个...
  • xiao88xin
  • xiao88xin
  • 2014年04月25日 16:03
  • 677

正则表达式匹配算法

看《代码之美》之美中有个简短而高效的正则表达式匹配算法,这里给一下简单的实现,供学习使用。#include #include #include using namespace std; int m...
  • whiterbear
  • whiterbear
  • 2013年12月10日 16:36
  • 3334

剑指offer系列之五十一:正则表达式匹配

题目描述请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。...
  • u011116672
  • u011116672
  • 2015年12月16日 14:52
  • 585

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

先来看一段php代码:
  • jiaobuchong
  • jiaobuchong
  • 2014年12月18日 21:00
  • 498

编写一个类,用来测试正则表达式,看看它们能否匹配一个输入字符串

package 正则表达式; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestReg...
  • u012110719
  • u012110719
  • 2014年11月10日 22:29
  • 1209

正则表达式中的结构

正则表达式中的结构字符表示法 字符缩略表示法:\n,\t,\a,\b,\e,\f,\r\,\v 八进制转义:\num 控制字符:\cchar 字符组及相关结构普通字符组:[a-z][^a-z] 任...
  • AirTesla
  • AirTesla
  • 2017年03月08日 20:27
  • 203

正则表达式常用的案例

 正则表达式常用的案例 //校验是否全由数字组成 代码 function isDigit(s)    {    //中括号表示字符范围 var patrn=/^[0-...
  • Mrf_w
  • Mrf_w
  • 2017年01月07日 16:34
  • 136

正则表达式RegExp

验证数字类型输入 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零...
  • Faremax
  • Faremax
  • 2017年01月05日 15:44
  • 554

Python字符串匹配的简单应用

在《Python 基础教程》中,作者在讲解re之前和我们来了个美式幽默:有些人面临一个问题时会想:"我知道,可以使用正则表达式来解决这个问题。”于是现在他们就有两个问题了。简单的一句玩笑话,却道出正则...
  • u010317195
  • u010317195
  • 2014年03月06日 10:40
  • 934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个正则表达式问题
举报原因:
原因补充:

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