正则表达式匹配中括号中1[35]什么意思

3512人阅读
&&&&& 说明:本文的例子使用python描述&&&&& 首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置。&&&&& 正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。这些简单的就不说了,今天主要说一下界定的使用方法(有些资料叫环式结构,名字而已,不重要)。界定也是一种零宽断言,界定主要有四类:&&&&& 1、前向界定(肯定顺序环视)(?=exp)&&&&& 表示右边要匹配exp表达式strTest = "aaa111aaa , bbb222&, 333ccc"
strRe = r"/d+(?=[a-z]+)"
reObj = re.compile(strRe)
print reObj.findall(strTest)
&&&&& 输出:(正则的意思是找出连续的数字并且最后一个数字跟着至少一个a-z里面的字符序列)['111', '333']
&&&&& 2、前向否定界定(否定顺序环视)(?!exp)&&&&& 表示右边不匹配exp表达式strTest = "aaa111aaa , bbb222&, 333ccc"
strRe = r"/d+(?![a-z]+)"
reObj = re.compile(strRe)
print reObj.findall(strTest)
&&&&& 输出:(正则的意思是找出连续的数字,并且最后一个数字后面不能跟任何一个a-z里面的字符序列)['11', '222', '33']
&&&&& 3、反向界定(肯定逆序环视)(?&=exp)&&&&& 表示左边要匹配exp表达式strTest = "aaa111aaa , bbb222&, 333ccc"
strRe = r"(?&=[a-z])/d+"
reObj = re.compile(strRe)
print reObj.findall(strTest)
&&&&& 输出:(正则的意思是找出连续的数字,并且第一个数字的前面要是a-z中的一个字符)['111', '222']
&&&&& 4、反向否定界定(否定逆序环视)(?&!exp)&&&&& 表示左边不要匹配exp表达式strTest = "aaa111aaa , bbb222&, 333ccc"
strRe = r"(?&![a-z])/d+"
reObj = re.compile(strRe)
print reObj.findall(strTest)
&&&&& 输出:(正则的意思是找出连续的数字,并且第一个数字的前面不能是a-z中的一个字符)['11', '22', '333']
&&&&& 这里要注意的一个问题是:在python和Perl中两个反向界定的表达式exp只允许使用定长文本,譬如最后第四个例子,如果正则表达式写成:strRe = r"(?&![a-z]+)/d+",py解释器会报错:error: look-behind requires fixed-width pattern。
&&&&& python里面还有一种命名组和无捕获组命名组比较牛&,也是python的扩展,能把捕获组向使用字典一样的使用:
s= 'Tom:9527 , Sharry:0003'
m=re.match( r'(?P&name&/w+):(?P&num&/d+)' , s)
print m.group()
print m.group(0)
print m.group(1)
print m.group(2)
print m.groups()
print m.group("name")
print m.group("num")
&&&&& 输出:Tom:9527
('Tom', '9527')
&&&&& 无捕获组的使用也是类似,语法:(?:exp)只是无捕获组匹配exp,但不捕获匹配的文本,也不给这个组分配组号。
&&&&& 用这种方法还能写正则表达式的注释,呵呵,语法:(?#exp),exp是注释,不对整个正则表达式产生任何副作用,仅供阅读。
&&&&& 使用python写的一个洗牌程序,简洁吧,嘿嘿。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from random import shuffle
from random import choice
values = range(2, 11) + 'Jack Queen King A'.split()
suits = 'diamonds clubs hearts spades'.split()
deck = ['%s_%s' % (v, s) for v in values for s in suits]
# 打乱顺序
shuffle(deck)
while deck:
# 随机取一个
randomCard = choice(deck)
print randomCard
deck.remove(randomCard)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:700314次
积分:7197
积分:7197
排名:第1112名
原创:132篇
转载:19篇
评论:313条
文章:14篇
阅读:42844
(2)(2)(2)(2)(1)(1)(3)(1)(1)(4)(2)(2)(3)(2)(4)(3)(1)(2)(2)(2)(5)(3)(2)(1)(2)(4)(2)(2)(1)(4)(1)(2)(2)(1)(3)(4)(2)(3)(1)(4)(3)(7)(9)(1)(7)(7)(1)(5)(3)(8)(5)(4)(3)(1)(4)青青子衿, 悠悠我心, 但为君故, 沉吟至今
常用正则表达式
  正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:\n\s*\r评注:可以用来删除空白行匹配HTML标记的正则表达式:&(\S*?)[^&]*&.*?&/\1&|&.*? /&评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力匹配首尾空白字符的正则表达式:^\s*|\s*$评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*评注:表单验证时很实用匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*评注:网上流传的版本功能很有限,上面这个基本可以满足需求匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$评注:表单验证时很实用匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}评注:匹配形式如
或 021-匹配腾讯QQ号:[1-9][0-9]{4,}评注:腾讯QQ号从10000开始匹配中国邮政编码:[1-9]\d{5}(?!\d)评注:中国邮政编码为6位数字匹配身份证:\d{15}|\d{18}评注:中国的身份证为15位或18位匹配ip地址:\d+\.\d+\.\d+\.\d+评注:提取ip地址时有用匹配特定数字:^[1-9]\d*$    //匹配正整数^-[1-9]\d*$   //匹配负整数^-?[1-9]\d*$   //匹配整数^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)评注:处理大量数据时有用,具体应用时注意修正匹配特定字符串:^[A-Za-z]+$  //匹配由26个英文字母组成的字符串^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串^[a-z]+$  //匹配由26个英文字母的小写组成的字符串^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串评注:最基本也是最常用的一些表达式原载地址:http://lifesinger.3322.org/myblog/?p=185
  除非注明,文章均为原创,转载请以链接形式标明本文地址
  本文地址:
谢谢分享...
.yunlingye
感觉不是说的那么好,比如匹配ip,就没弄具体一点,还有身份证,感觉就是错的(最后一位可以为x)
0-255匹配:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]简化为25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])?[0-9]
谢谢,转载了。不过有些关于中文的正则需要在特定编程语言环境下才能正常使用。
正则写的很屎
谢谢,找了好久
不太好~!有些错误~!
太差了,你都测试过了吗?整数不认0email输两个@都可以,#!都不报错
怎么没有匹配网址的?
.huangcheng
谢 了,,,,,..
说好的可以说是完全不懂正则 表达式的。。俺虽然不是高手,但是都看得出来,不怎么好。。
真得很不错,收藏了!
好的很,不打篮球就做下网站啊,什么的
好多都不怎么严格的,用的时候还需要留意的,友情提示。
示例?疯狂代码?
.技术无止境
感谢提供,已经搜藏
貌似很高深啊
不是很专业,有些匹配条件不严谨
很有帮助,等待更有帮助的信息
什么是正则啊?
妈蛋,试了一下,错的
匹配ip地址:\d+\.\d+\.\d+\.\d+是不是有问题啊,我要是444.5345也能匹配?谢 于
13:14:49 回复写的不错,有的地方如果不是专业的就会看不懂!我已经收藏!谢 于
13:16:49 回复没有问题,在{}中是长度你可以试一下!试试可以用不 于
9:43:50 回复不行用不了
这样应该可以
\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3} (双斜线是转换)zhenwulv 于
14:00:46 回复((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)应该是这样的
最近在学URL重定向,,收藏了,谢谢
.ddddddddddd
一看就是抄袭的正实数怎么办?例如金融的钱币格式。
邮编的验证规则是错的,有0开头的邮编
.小时候很帅
18位身份证会有X结尾的,最后一位要改下。
.匹配ip地址
匹配ip地址,你试试这个。但是还有一个IP格式没有满足,比如:256.275.285.295,我们都知道,IP地址最大是不可以超过255的。请高手指点,有什么办法解决这个问题,先谢谢。\b(([0-9]{0,3})\.){3}[0-9]{0,3}\b试试可以用不 于
9:24:45 回复\d{1,3}\.{1,3}\.{1,3}\.{1,3}php学员 于
9:31:41 回复这个是错误的\d的意思就是[0-9]后面加上{1,3}极有可能大于255
这个错了匹配身份证:\d{15}|\d{18}18位身份证号的末位可能是字母zhenwulv 于
10:14:18 回复\d{15}|\d{18}把18改成17后加个x再或一下不就可以了?你还是要学点基本的东西。
不错,收藏了
IP地址的匹配好象不對吧。。
.baobaoyan
(?!^0*$)(?!^0*\.0*$)^\d{1,1}(\d{1,2})?$这个判断正整数小于1000的正则表达式
匹配身份证:^\d{14}\w|\d{17}\w$或者:^\d{14}\d{3}?\w$这样就可以包含象34567x的内容了!
好文值得收藏!
在第一个公司,天天要来看正则,在第三个公司了,在baidu一搜索又来看了.呵呵.谢谢!
,匹配问题,深圳号码江苏大 于
19:30:02 回复很好不错
匹配中文 是错误的
测试一下,不好意思。
好东西,收藏了!
匹配腾讯QQ号:[1-9][0-9]{4,}[1-9]{5,}
身份证好像错了
不是很专业的
你的中国身份证号里边少了一个,比如一个人的身份证是:34567x你的正则表达式就会验证出错~~!应该怎么加一下呢?
正式我想要的哈,谢谢了
很有帮助,等待更有帮助的信息
正好用的着我转到我的网站上去了不介意吧?呵呵
如果不回家不要乱写 好么 郁闷
哎,我一个业余选手都能看出很不专业……
.恳求帮助的人
允许输入字母,数字,下划线,.,@这个正则表达式怎么写啊?
.originaldream
大哥!你真是传说中的牛人。每次困境中找资料,看到你的博客都特亲切。如果有你这样的精神,经常写博客,分享经验。如果有你这么全的计算机知识。该多好!!如果真有你这样的老师,能手把手教计算机,也就不会学的这么痛苦了!!
ds邮编的验证规则是错的,有0开头的邮编
非常感谢月光,帮助很大!
对研究 mod_rewrite 有用啊
这个样应该可以把。谢谢。
0~255 可以这样表示:^2[04]\d|25[0-5]|[01]?\d?\d$可是,1~255就不知道怎样表示了?请哪位高手过招!zhenwulv 于
10:16:24 回复25[1-5]|[01]?\d?\d$
赞助商广告
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.

我要回帖

更多关于 js中正则表达式的使用 的文章

 

随机推荐