正则表达式手册(regexp正则表达式)
其实正则表达式手册的问题并不复杂,但是又很多的朋友都不太了解regexp正则表达式,因此呢,今天小编就来为大家分享正则表达式手册的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
PHP正则表达式的使用技巧
PHP正则表达式的定义
用于描述字符排列和匹配模式的一种语法规则它主要用于字符串的模式分割匹配查找及替换操作
PHP中的正则函数
PHP中有两套正则函数两者功能差不多分别为
一套是由PCRE(Perl Compatible Regular Expression)库提供的使用 preg_为前缀命名的函数
一套由POSIX(Portable Operating System Interface of Unix)扩展提供的使用以 ereg_为前缀命名的函数(POSIX的正则函数库自PHP以后就不在推荐使用从PHP以后就将被移除)
由于POSIX正则即将推出历史舞台并且PCRE和perl的形式差不多更利于我们在perl和php之间切换所以这里重点介绍PCRE正则的使用
PCRE正则表达式
PCRE全称为Perl Compatible Regular Expression意思是Perl兼容正则表达式
在PCRE中通常将模式表达式(即正则表达式)包含在两个反斜线/之间如/apple/
正则中重要的几个概念有元字符转义模式单元(重复)反义引用和断言这些概念都可以在文章[ ]中轻松的理解和掌握
常用的元字符(Meta character)
元字符说明
/A匹配字符串串首的原子
/Z匹配字符串串尾的原子
/b匹配单词的边界//bis/匹配头为is的字符串/is/b/匹配尾为is的字符串//bis/b/定界
/B匹配除单词边界之外的任意字符//Bis/匹配单词 This中的 is
/d匹配一个数字等价于[ ]
/D匹配除数字以外任何一个字符等价于[^ ]
/w匹配一个英文字母数字或下划线等价于[ a zA Z_]
/W匹配除英文字母数字和下划线以外任何一个字符等价于[^ a zA Z_]
/s匹配一个空白字符等价于[/f/t/v]
/S匹配除空白字符以外任何一个字符等价于[^/f/t/v]
/f匹配一个换页符等价于/x c或/cL
匹配一个换行符等价于/x a或/cJ
匹配一个回车符等价于/x d或/cM
/t匹配一个制表符等价于/x/或/cl
/v匹配一个垂直制表符等价于/x b或/ck
/oNN匹配一个八进制数字
/xNN匹配一个十六进制数字
/cC匹配一个控制字符
模式修正符(Pattern Modifiers)
模式修正符在忽略大小写匹配多行中使用特别多掌握了这一个修正符往往能解决我们遇到的很多问题
i-可同时匹配大小写字母
M-将字符串视为多行
S-将字符串视为单行换行符做普通字符看待使匹配任何字符
X-模式中的空白忽略不计
U-匹配到最近的字符串
e-将替换的字符串作为表达使用
格式/apple/i匹配 apple或 Apple等忽略大小写/i
PCRE的模式单元
//提取第一位的属性
/^/d{}([/W])/d{}///d{}$匹配//等字符串但上述正则表达式不匹配/的格式这是因为模式 [/W]的结果/已经被存储下个位置/引用时其匹配模式也是字符/
当不需要存储匹配结果时使用非存储模式单元(?)
例如/(?:a|b|c)(D|E|F)// g/将匹配 aEEg在一些正则表达式中使用非存储模式单元是必要的否则需要改变其后引用的顺序上例还可以写成/(a|b|c)(C|E|F)/ g/
PCRE正则表达式函数
以下为引用的内容
preg_match()和preg_match_all() preg_quote() preg_split() preg_grep() preg_replace()
函数的具体使用我们可以通过PHP手册来找到下面分享一些平时积累的正则表达式
匹配action属性
以下为引用的内容
$str=;$match=; preg_match_all(//s+action=/(?!)(*?)//s/$str$match); print_r($match);
在正则中使用回调函数
以下为引用的内容
/*** replace some string by callback function**/ function callback_replace(){$url=;$str=;$str= preg_replace(/(?<=/saction=/)(?!)(*?)(?=//s)/e search(/$url//)$str); echo$str;} function search($url$match){ return$url/$match;}
带断言的正则匹配
以下为引用的内容
$match=;$str= xxxxxx cn bold font paragraph text
; preg_match_all(/(?<=<(/w{})>)*(?=<///>)/$str$match); echo匹配没有属性的HTML标签中的内容; print_r($match);
替换HTML源码中的地址
以下为引用的内容
$form_= preg_replace(/(?<=/saction=/|/ssrc=/|/s)(?!|javascript)(*?)(?=//s)/e add_url(/$url////)$form_);
lishixinzhi/Article/program/PHP/201311/21027
邮箱正则表达式+正则基本知识点
一般程序员的姿势
正则表达式正确的运用姿势
今天来搞几个邮箱正则表达式,匹配多级域名,包括中文域名
从上图可以得出,除去“.”号,域名既有英文(最多是6个字符),也有中文(最多是3个汉字)
而现在有很多影子邮箱/百变邮箱,是使用二级域名或者三级域名,所以,我们先列举如下几个邮箱,然后写一个正则表达式,去匹配、判断
不管是什么邮箱,确定会有的字符是“@”和至少一个“.”(这里特指最后一个),那么我们就以这两个确定的符号为分界点,将每个邮箱拆分成3段,对每一段进行正则匹配,最终组成整个邮箱的正则匹配。当然进入下一步之前,先理一理基本知识点。
定义:一个正则可以匹配的字符串的长度不是固定的,使用量词可以达到这种目的。
量词:比如{m, n}:表示连续出现最少 m次,最多 n次;跟在一个字符的后面就表示对该字符的限定。
比如邮箱的校验:/^\w+@[a-z0-9]+.[a-z]{2,4}$/,写在了[a-z]后面,表示可以有2到4位的字母
又比如手机号的校验:/^1[3456789]\d{9}$/,跟在了\d后面,表示需要出现9个数字
对于量词的总结:
定义:正则匹配的字符串对于某一位置上的字符来说,它可以有多种可能,不局限于某一类型,使用字符组可以达到这种目的。
字符组:比如[abc],表示该字符是可以字符"a"、"b"、"c"中的任何一个。对于这一位置来说,我们可以有3种可能性。
比如手机号的校验:/^1[3456789]\d{9}$/,它在第二个位置,根据一般手机运营商来说,提供手机第二位的数字可以是3到9的任意一个,才符合规范。
如果字符组里表示的字符特别多,可以使用范围表示法,用连字符-来省略和缩写。
比如邮箱的校验:/^\w+@[a-z0-9]+.[a-z]{2,4}$/,它跟在@后面,根据我们邮箱的规范可知,@后面的 [a-z0-9]+表示:数字0到9和字母a-z中的至少一个字符
这里简单解析一下:
对于js正则:([a-z]{2,6}|[\u2E80-\u9FFF]{2,3})
js正则的中文汉字正则表达式来源于手册:
对于php正则:([a-z]{2,6}|[\x7f-\xff]{6,9})
在utf-8编码中,用ASCII码表中的第128~255编码中的3个编码表示一个汉字,这里用十六进制表示
验证一下:
运行结果:
运行结果
全部通过
当然,php正则匹配邮箱,还可以这样子
原理与/^\w+@([\da-z\.-]+)\.([a-z]{2,6}|[\x7f-\xff]{6,9})/类似。
最后,上面的几个正则表达式是居于当前市面上现存的域名进行匹配的,下面提供几个更加宽松的邮箱正则匹配
原理都相似,可以对照理解下。如有误,欢迎留言区批评指正。
正则表达式怎样匹配任意字符
在正则中,匹配任意字符,其实写法网上有很多,但因为各种软件或程序写法不支持等原因导致的问题,大家可以多研究。
今天在Java中想使用正则表达式来获取一段文本中的任意字符。于是很随意得就写出如下匹配规则:
(.*)
结果运行之后才发现,无法获得换行之后的文本。于是查了一下手册,才发现正则表达式中,“.”(点符号)匹配的是除了换行符“\n”以外的所有字符。同时,手册上还有一句话:要匹配包括
'\n'在内的任何字符,请使用像'[.\n]'的模式。于是我将正则表达式的匹配规则修改如下:
([.\n]*),当然,如果是在java程序中直接写到话,需要改为([.\\n]*)
结果再次运行程序,发现什么内容也取不到了。我百思不得其解,又将其修改为如下规则:
([.|\n]*)以及([\n.]*)
结果还是不行,什么内容都取不到。看来点符号和换行符卯上劲了~
然后上网一查,虽然没有查出上述规则到底是什么地方出问题了,但是查出了一个解决办法,经过一试,果然可以匹配包括换行符在内的任意字符,以下为正确的正则表达式匹配规则:
([\s\S]*)
同时,也可以用“([\d\D]*)”、“([\w\W]*)”来表示。
在文本文件里,
这个表达式可以匹配所有的英文
/[-~]/
这个表达式可以匹配所有的非英文(比如中文)
/[^-~]/
/是VI里用的.
你在editplus或程序里不需要/
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!