正则

转载 2011年01月22日 22:03:00
从某种意义上来说,正则就是通配符(如*、?)的加强版写法。


注释语法:(?#comment) ,其中comment代表注释内容。
正则中转义符为“/”
正则中可以使用条件进行限制,符号为“|”(意思应该是“或”)



* 匹配*前面的字符任意次(最少0次)

+ 匹配前面的字符重复1次或更多次

? 匹配前面的字符零次或一次

/b代表单词开始或结束位置(可以是空格、标点、回车、TAB等)

--例:/ba.+/b 代表匹配以a开始的单词后换行之前的本句所有字符
--/ba*/b 代表匹配仅以字母a组成的单词(如a、aa、aaaaa……)



. 可以匹配除换行外任意字符

/d 匹配一个数字(范围:0-9)

{n} 代表匹配前面的字符n次

{n,} 代表匹配前面的字符至少n次

{n,m} 代表匹配前面的字符至少n次,至多m次(符号均为半角,中间不可有空格)

--例:/d{5,} 代表需要匹配的对象中最少有连续5个数字




/s 匹配任何空白字符,包括空格、制表符、换页符等等。

/w 匹配字母或数字或下划线或汉字 

^ 匹配字符串的开始 
$ 匹配字符串的结束 

--例:^/w{6}/s/w+$ 代表整个文本必须是以由6个字符(仅包括字母、数字、开线、汉字)组成的单词开头,并紧跟一个空白字符,然后是由至少一个单词字符构成的单词结束。




[字符] 这种形式可以预定要匹配的字符,比如[aeiou]可以匹配任意一个且仅一个元音字母。

[.?!] 匹配(.或?或!)这三个中任意一个标点符号。





/f 匹配一个换页符。等价于 /x0c 和 /cL。 

/n 匹配一个换行符。等价于 /x0a 和 /cJ。 

/r 匹配一个回车符。等价于 /x0d 和 /cM。

/t 匹配一个制表符。等价于 /x09 和 /cI。 

/v 匹配一个垂直制表符。等价于 /x0b 和 /cK。



重复多个字符可以使用分组,符号为“()”。此处()内的内容应该看做一个整体。
每个组都会有自己的名字,若没有人为命名则从第一个组开始依次为:/1 /2 /3 ……

分组的命名方式为(?<组名>/d*/b)或(?'组名'/d*/b)。

人为命名的分组引用方式为:/k<组名> 或 /k'组名'

实际上组号分配过程要从左向右扫描两遍:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号 

分组0对应整个正则表达式 

--例:/b(/w+)/b/s+/1/b 用这个表达式可以轻松的找出连续重复的单词,具体怎么解释~~ “你懂的”




反义:将元字符转换为大写既是反义。(这里不清楚是否所有的元字符大写都是反义)

/W 匹配任意不是字母,数字,下划线,汉字的字符 
/B 匹配不是单词开头或结束的位置 
[^x] 匹配除了x以外的任意字符 
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符 







零宽断言,分为正向(既匹配)与负向(既不匹配)两种。

语法如下:
(?=Examples) 匹配Examples前面的位置 
(?<=Examples) 匹配Examples后面的位置 
(?!Examples) 匹配((?!Examples)这个表达式)后面跟的不是Examples的位置 
(?<!Examples) 匹配((?!Examples)这个表达式)前面不是Examples的位置 


顾名思义,使用零宽断言不浪费字符位置。比如需要查找:包含字母t且t后面不是字母c的一个单词。此时可以使用如下正则表达式:/b/w*t[^c]/w*/b 。但如果此单词最后一位是t的情况下[^c]依然会继续匹配下一个字符,那么若用来匹配do not giev up 会取出 "not giev"两个单词。

是的,这并不是我的原意。

那好的,现在我使用 /b/w*t(?!c)/w*/b 来匹配。哇太棒了,结果是"not"!不得不承认我是个天才~~




贪婪匹配(最多匹配)

在使整个表达式能得到匹配的前提下匹配尽可能多的字符。

--例:a.*b 用来匹配ababababababab时会将ababababababab整个提取出来。

懒惰匹配(最少匹配)

在能使整个匹配成功的前提下使用最少的重复

--例:a.*?b 用来匹配ababababababab时会将ab切割提取出来,既只提取了第一个ab。





捕获 (不怎么理解这东西···哪位高手给讲下)

(Examples) 匹配Examples,并捕获文本到自动命名的组里
(?<name>Examples) 匹配Examples,并捕获文本到名称为name的组里,也可以写成(?'name'Examples)
(?:Examples) 匹配Examples,不捕获匹配的文本,也不给此分组分配组号
 
 

 

 

#1楼
原义字符集:


/b 匹配一个单词边界,也就是指单词和空格(或标点,jorln)间的位置。

/B 匹配非单词边界。 

/cx 匹配由x指明的控制字符。 

/d 匹配一个数字字符。等价于 [0-9]。

/D 匹配一个非数字字符。等价于 [^0-9]。 

/f 匹配一个换页符。等价于 /x0c 和 /cL。 

/n 匹配一个换行符。等价于 /x0a 和 /cJ。 

/r 匹配一个回车符。等价于 /x0d 和 /cM。 

/s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ /f/n/r/t/v]。 

/S 匹配任何非空白字符。等价于 [^ /f/n/r/t/v]。 

/t 匹配一个制表符。等价于 /x09 和 /cI。 

/v 匹配一个垂直制表符。等价于 /x0b 和 /cK。 

/w 匹配包括下划线的任何单词字符(包括汉字)。等价于’[A-Za-z0-9_]’。 

/W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。 

/xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

/num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。 

/n 标识一个八进制转义值或一个后向引用。如果 /n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 

/nm 标识一个八进制转义值或一个后向引用。如果 /nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 /nm 之前至少有 n 个获取,则 n 为一个后跟

文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 /nm 将匹配八进制转义值 nm。 

/nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 

/un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。

[/u4E00-/u9FA5] 匹配汉字

身份证号详细验证的正则

/* * 身份证15位编码规则:dddddd yymmdd xx p * dddddd:6位地区编码 * yymmdd: 出生年(两位年)月日,如...
  • qq_30638831
  • qq_30638831
  • 2017年08月08日 15:46
  • 275

谈谈自己对正则化的一些理解~

上学的时候,就一直很好奇,模式识别理论中,常提到的正则化到底
  • wsj998689aa
  • wsj998689aa
  • 2014年09月25日 12:12
  • 24294

正则表达式与文件格式处理-Linux(笔记)

1、基础正则表达式字符 ^word 意义:待查找的字符串在行首 范例 grep -n ‘^#’ doc.txt word意义:待查找的字符串在行尾范例grep−n‘a 意义:待查找的字符串在行...
  • qq_16687803
  • qq_16687803
  • 2015年06月13日 11:17
  • 778

正则化及正则化项的理解

首先了解一下正则性(regularity),正则性衡量了函数光滑的程度,正则性越高,函数越光滑。(光滑衡量了函数的可导性,如果一个函数是光滑函数,则该函数无穷可导,即任意n阶可导)。 正则化是为了解决...
  • gshgsh1228
  • gshgsh1228
  • 2016年08月13日 21:55
  • 10871

redis按正则获取keys

redis 的keys可以根据正则获取匹配的keys,例如查找某一类型的sql,如下面查找表名下的show类型的keys keys db:table:[a-zA-Z_/d]*:show:* 也可以...
  • mochong
  • mochong
  • 2017年03月28日 14:40
  • 3539

深度学习:正则化方法

正则化是机器学习中非常重要并且非常有效的减少泛华误差的技术,特别是在深度学习模型中,由于其模型参数非常多非常容易产生过拟合。因此研究者也提出很多有效的技术防止过拟合,比较常用的技术包括: 参...
  • liujiandu101
  • liujiandu101
  • 2017年02月14日 18:27
  • 3948

L2正则化方法

在机器学习中,无论是分类还是回归,都可能存在由于特征过多而导致的过拟合问题。当然解决的办法有     (1)减少特征,留取最重要的特征。   (2)惩罚不重要的特征的权重。   但是通常情况下,我们不...
  • ACdreamers
  • ACdreamers
  • 2015年05月30日 12:51
  • 13757

机器学习中正则化项L1和L2的直观理解

正则化(Regularization)机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作l1-norm和l2-norm,中文称作L1正则化和L2正则化,或者L1...
  • jinping_shi
  • jinping_shi
  • 2016年09月04日 18:49
  • 25713

在js中使用正则表达式

一个正则表达式是由普通字符(如a~z)以及特殊字符(称为元字符)组成的模式字符串。该模式字符串描述在查找文字主体时待匹配的一个和多个字符串。   1、字符类   [.......]  匹配方括号中字符...
  • hxy19971101
  • hxy19971101
  • 2016年10月05日 22:35
  • 1034

线性回归和正则化(Regularization)

1.线性回归介绍 线性模型的向量形式 为了解决这个问题,我们采用最小二乘估计求解参数Beta, 最小二乘的几何介绍 图来源(ESL p45) 最小二乘的几何解...
  • u013363719
  • u013363719
  • 2014年04月08日 20:14
  • 5579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正则
举报原因:
原因补充:

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