文档库 最新最全的文档下载
当前位置:文档库 › 看实例学PHP正则表达式

看实例学PHP正则表达式

看实例学PHP正则表达式
看实例学PHP正则表达式

看实例学php正则表达式

我在一个网站工作,而这个网站最主要的内容是用户在我们的论坛输入的信息,所有这些数据在录入数据库之前都必须经过检查。我知道php3的正则表达式可以解决我的问题,但首先我不知道怎么去建立一个正则表达式。我需要一些正则表达式做例子――很明显,我第一个找的地方是php3的手册和POSIX1002.3规范说明,但他们举例的方式都不是很有用。除此以外,我还花了大量的时间在网上寻找关于这个主题的好文章。我最后终于知道了正则表达式的用法,大多数都是通过试验得出的,鉴于这些内容都不是很多,我决定写下了这一篇直接介绍正则表达式语法的和一个step by step建立验证货币和email的正则表达式。我希望它能够清除大家对正则表达式的困惑

正则表达式的基本语法

首先,让我们看看两个特别的字符:’^’和‘$’他们是分别用来匹配字符串的开始和结束,一下分别举例说明

?"^The":匹配以"The"开头的字符串;

?"of despair$":匹配以"of despair"结尾的字符串;

?"^abc$":匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配

?"notice":匹配包含notice的字符串

你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边

这里还有几个字符'*','+',和'?',他们用来表示一个字符可以出现的次数或者顺序.他们分别表示:"zero or more","one or more",and"zero or one."这里是一些例子:

?"ab*":匹配字符串a和0个或者更多b组成的字符串("a","ab","abbb",etc.);

?"ab+":和上面一样,但最少有一个b("ab","abbb",etc.);

?"ab?":匹配0个或者一个b;

?"a?b+$":匹配以一个或者0个a再加上一个以上的b结尾的字符串.

你也可以在大括号里面限制字符出现的个数,比如

?"ab{2}":匹配一个a后面跟两个b(一个也不能少)("abb");

?"ab{2,}":最少更两个b("abb","abbbb",etc.);

?"ab{3,5}":2-5个b("abbb","abbbb",or"abbbbb").

你还要注意到你必须总是指定(i.e,"{0,2}",not"{,2}").同样,你必须注意到,'*','+',和'?'分别和一下三个范围标注是一样的,"{0,}","{1,}",和"{0,1}"。

现在把一定数量的字符放到小括号里,比如:

?"a(bc)*":匹配a后面跟0个或者一个"bc";

?"a(bc){1,5}":一个到5个"bc."

还有一个字符'|',相当于OR操作:

?"hi|hello":匹配含有"hi"或者"hello"的字符串;

?"(b|cd)ef":匹配含有"bef"或者"cdef"的字符串;

?"(a|b)*c":匹配含有这样-多个(包括0个)a或b,后面跟一个c的字符串的字符串;

一个点('.')可以代表所有的单一字符:

?"a.[0-9]":一个a跟一个字符再跟一个数字的(含有这样一个字符串的字符串将被匹配,以后省略此括号)

?"^.{3}$":以三个字符结尾.

中括号括住的内容只匹配一个单一的字符

?"[ab]":匹配单个的a或者b(和"a|b"一样);

?"[a-d]":匹配'a'到'd'的单个字符(和"a|b|c|d"还有"[abcd]"效果一样);

?"^[a-zA-Z]":匹配以字母开头的字符串

?"[0-9]%":匹配含有形如x%的字符串

?",[a-zA-Z0-9]$":匹配以逗号在加一个数字或字母结尾的字符串

你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^'作为开头(i.e., "%[^a-zA-Z]%"匹配含有两个百分号里面有一个非字母的字符串).

为了能够解释,但"^.[$()|*+?{\"作为有特殊意义的字符的时候,你必须在这些字符面前加'\',还有在php3中你应该避免在模式的最前面使用\,比如说,正则表达式"(\$|?[0-9]+"应该这样调用ereg("(\\$|?[0-9]+",$str)(不知道php4是不是一样)

不要忘记在中括号里面的字符是这条规路的例外—在中括号里面,所有的特殊字符,包括('\'),都将失去他们的特殊性质(i.e.,"[*\+?{}.]"匹配含有这些字符的字符串).还有,正如regx的手册告诉我们:"如果列表里含有']',最好把它作为列表里的第一个字符(可能跟在'^'后面).

如果含有'-',最好把它放在最前面或者最后面,or或者一个范围的第二个结束点(i.e.

[a-d-0-9]中间的‘-’将有效.

为了完整,我应该涉及到collating sequences,character classes,同埋equivalence classes.但我在这些方面不想讲的太详细,这些在下面的文章仲都不需要涉及到.你们可以在regex man pages那里得到更多消息.

检查字符串是否为money

好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式:"10000.00"和"10,000.00",或者没有小数部分,"10000"and"10,000".现在让我们开始构建这个匹配模式:

^[1-9][0-9]*$

这是所变量必须以非0的数字开头.但这也意味着单一的"0"也不能通过测试.以下是解决的方法:

^(0|[1-9][0-9]*)$

"只有0和不以0开头的数字与之匹配",我们也可以允许一个负号再数字之前:

^(0|-?[1-9][0-9]*)$

这就是:"0或者一个以0开头可能有一个负号在前面的数字."好了,好了现在让我们别那么严谨,允许以0开头.现在让我们放弃负号,因为我们在表示钱币的时候并不需要用到.我们现在指定模式用来匹配小数部分:

^[0-9]+(\.[0-9]+)?$

这暗示匹配的字符串必须最少以一个阿拉伯数字开头.但是注意,在上面模式中"10."是不匹配的,只有"10"和"10.2"才可以.(你知道为什么吗)

^[0-9]+(\.[0-9]{2})?$

我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:

^[0-9]+(\.[0-9]{1,2})?$

这将允许小数点后面有一到两个字符.现在我们加上用来增加可读性的逗号(每隔三位),我们可以这样表示:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$

不要忘记加号'+'可以被乘号'*'替代如果你想允许空白字符串被输入话(为什么?).也不要忘记反斜杆’\’在php字符串中可能会出现错误(很普遍的错误).现在,我们已经可以确认字符串了,我们现在把所有逗号都去掉str_replace(",","",$money)然后在把类型看成double然后我们就可以通过他做数学计算了.

检查email

好,让我们继续讨论怎么验证一个email地址.在一个完整的email地址中有三个部分:POP3用户名(在'@'左边的一切),'@',服务器名(就是剩下那部分).用户名可以含有大小写字母阿拉伯数字,句号('.'),减号('-'),and下划线('_').服务器名字也是符合这个规则,当然下划线除外.

现在,用户名的开始和结束都不能是句点.服务器也是这样.还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:

^[_a-zA-Z0-9-]+$

现在还不能允许句号的存在.我们把它加上:

^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$

上面的意思就是说:"以至少一个规范字符(除.意外)开头,后面跟着0个或者多个以点开始的字符串."

简单化一点,我们可以用eregi()取代ereg().eregi()对大小写不敏感,我们就不需要指定两个范围"a-z"和"A-Z"–只需要指定一个就可以了:

^[_a-z0-9-]+(\.[_a-z0-9-]+)*$

后面的服务器名字也是一样,但要去掉下划线:

^[a-z0-9-]+(\.[a-z0-9-]+)*$

Done.现在只需要用”@”把两部分连接:

^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

这就是完整的email认证匹配模式了,只需要调用

eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$’,$eamil)就可以得到是否为email了

Other uses

提取字符串

ereg()and eregi()有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册).比如说,我们想从path/URL提取文件名–下面的代码就是你需要:

ereg("([^\\/]*)$",$pathOrUrl,$regs);

echo$regs[1];

高级的代换

ereg_replace()和eregi_replace()也是非常有用的:假如我们想把所有的间隔负号都替换成逗号:

ereg_replace("[\n\r\t]+",",",trim($str));

一些练习

Now here's something to make you busy:

?modify our e-mail-validating regular expression to force the server name part to consist of at least two names(hint:only one character needs to be changed);

?build a function call to ereg_replace()that emulates trim();

?make up another function call to ereg_replace()that escapes the characters'#','@','&',and'%'of a string with a'~'.

Have fun!

--dario

正则表达式 Regular Expression 例子 sample VB版

VS SDK Regular Expression Language Service Example Deep Dive (VB) István Novák (DiveDeeper), Grepton Ltd. May, 2008 Introduction This example implements a small language service for demonstration purposes. This is called Regular Expression Language Service since it can tokenize text by RegEx patterns (lower case letters, capital letters, digits) and can use its own syntax coloring scheme for each token. However, the functionality of this sample is quite far away from a full language service it illustrates the basics. The source files belonging to this code have only about three hundred lines of essential code. When reading through this deep dive you are going to get familiar with the following concepts: How language services should be registered with Visual Studio? What kind of lifecycle management tasks a simple language service has? How to create a very simple language service? How to implement a scanner supporting syntax coloring? To understand concepts treated here it is assumed that you are familiar with the idea of VSPackages and you know how to build and register very simple (even non-functional) packages. To get more information about packages, please have a look at the Package Reference Sample (VisualBasic Reference.Package sample). Very basic knowledge about regular expressions is also expected. Regular Expression Language Service Open the Microsoft Visual Studio 2008 SDK Browser and select the Samples tab. In the top middle list you can search for the “VisualBasic Example.RegExLangServ” sample. Please, use the “Open this sample in Visual Studio” link at the top right panel of the browser app to prepare the sample. The application opens in Visual Studio 2008. Running the sample Rebuild the package and start it with the Experimental Hive! Without creating a new solution, add a new text file with the File|New|File... menu function. Use the File|Save As menu function to store the text file with the RegexFile.rgx name. To avoid attaching the .txt extension to the end of the file name, set the “Save as type” to “All files (*.*)” as illustrated in Figure 1:

php的正则表达式完全手册

php的正则表达式完全手册 前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。 索引 1._引子 2._正则表达式的历史 3._正则表达式定义 3.1_普通字符 3.2_非打印字符 3.3_特殊字符 3.4_限定符 3.5_定位符 3.6_选择 3.7_后向引用 4._各种操作符的运算优先级 5._全部符号解释 6._部分例子 7._正则表达式匹配规则 7.1_基本模式匹配 7.2_字符簇 7.3_确定重复出现 1. 引子 目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。 正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。 注意:这里的第7部分跟前面的内容看起来似乎有些重复,目的是把前面表格里的部分重新描述了一次,目的是让这些内容更容易理解。 2. 正则表达式的历史 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。 如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。 3. 正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

正则表达式.DOC

正则表达式 第一部分: ----------------- 正则表达式(REs)通常被错误地认为是只有少数人理解的一种神秘语言。在表面上它们确实看起来杂乱无章,如果你不知道它的语法,那么它的代码在你眼里只是一堆文字垃圾而已。实际上,正则表达式是非常简单并且可以被理解。读完这篇文章后,你将会通晓正则表达式的通用语法。 支持多种平台 正则表达式最早是由数学家Stephen Kleene于1956年提出,他是在对自然语言的递增研究成果的基础上提出来的。具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。自从那时起,正则表达式经过几个时期的发展,现在的标准已经被ISO(国际标准组织)批准和被Open Group 组织认定。 正则表达式并非一门专用语言,但它可用于在一个文件或字符里查找和替代文本的一种标准。它具有两种标准:基本的正则表达式(BRE),扩展的正则表达式(ERE)。ERE包括BRE功能和另外其它的概念。 许多程序中都使用了正则表达式,包括xsh,egrep,sed,vi以及在UNIX平台下的程序。它们可以被很多语言采纳,如HTML和XML,这些采纳通常只是整个标准的一个子集。 比你想象的还要普通 随着正则表达式移植到交叉平台的程序语言的发展,这的功能也日益完整,使用也逐渐广泛。网络上的搜索引擎使用它,e-mail程序也使用它,即使你不是一个UNIX程序员,你也可以使用规则语言来简化你的程序而缩短你的开发时间。 正则表达式101 很多正则表达式的语法看起来很相似,这是因为你以前你没有研究过它们。通配符是RE的一个结构类型,即重复操作。让我们先看一看ERE标准的最通用的基本语法类型。为了能够提供具有特定用途的范例,我将使用几个不同的程序。

PHP开发笔试题

PHP基础测试 (答题时间:90分钟总分100分) 一、选择题(共40道每道2分) 1. 阅读下面php代码,并选择正确的输出结果(): a)314 b)0 c)100 d) 3.14 2. PHP支持八种原始类型,其中下面哪个()不属于四种标量类型。 a)boolean(布尔型) b)integer(整型) c)array(数组) d)string(字符串) 3. PHP中的变量用一个美元符号后面跟变量名来表示,那么下面变量名定义错误的是()。 a)$name123 b)$_age c)$8n d)$_234 4. 阅读下面php代码,并选择正确的输出结果。 20,"y"=>30,40,2=>50,60); echo $a[0].":".$a[1].":".$a[3]; ?> a)40::60 b)40:50:60 c)40:60: d)40:: 5. 下面哪个函数是计算数组中的单元数目或对象中的属性个数。 a)sum() b)arraySize() c)length( ) d)count( )

6. 下面关于正则表达式的函数描述错误的是(); a)preg_replace -- 执行正则表达式的搜索和替换 b)preg_match -- 进行正则表达式匹配 c)preg_replace -- 执行正则表达式的搜索和替换 d)preg_split -- 用正则表达式拼装字符串 7. 在PHP中,字符串的定义方式有三种,下面哪个不是字符串的定义方式。 a)单引号‘’ b)双引号“” c)定界符<<< d)字串函数string( ) 8. 阅读下面PHP程序代码,并选择正确结果: a)bcdef bcd b)abcdef bcd c)bcdef abc d)abcdef abc 9. 在PHP中date()函数是格式化一个本地时间和日期函数,下面对格式化字串描述错误的是: a)Y:4 位数字完整表示的年份 b)m:数字表示的月份,有前导零 c)d:月份中的第几天,有前导零的 2 位数字 d)H:小时,12 小时格式,有前导零 10. 在PHP中fopen( )函数是打开文件或者URL地址,其中对打开模式描述错误的是(): a)'r':只读方式打开,将文件指针指向文件头。 b)'w':写入方式打开,将文件指针指向文件头并将文件大小截为零。如果 文件不存在则尝试创建之。 c)'a+':写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝 试创建之。 d)'x':建并以写入方式打开,将文件指针指向文件头。如果文件已存在, 则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错 误信息。 11. 以下关于key()和current()函数的叙述,请找出正确的答案:()。 a)key()函数用来读取目前指针所指向资料的索引值 b)key()函数是取得目前指针位置的内容资料

PHP 常用正则表达式 正则

PHP 常用正则表达式正则 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:"^\d+$"//非负整数(正整数+ 0) "^[0-9]*[1-9][0-9]*$"//正整数 "^((-\d+)|(0+))$"//非正整数(负整数+ 0) "^-[0-9]*[1-9][0-9]*$"//负整数 "^-?\d+$"//整数 "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 "^(-?\d+)(\.\d+)?$"//浮点数 "^[A-Za-z]+$"//由26个英文字母组成的字符串 "^[A-Z]+$"//由26个英文字母的大写组成的字符串 "^[a-z]+$"//由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 元字符及其在正则表达式上下文中的行为: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转

PHP中的正则函数

PHP正则表达式:PHP中的正则函数 【简介】 PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑。 PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑。 我的PHP正则入门,是起源于网上的一篇文章,这篇文章由浅入深的阐述了PHP正则表达式使用的方法,我觉得是一个很好的入门材料,不过学成还是要靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇文章有四五遍,对于其中一些比较困难的知识点,甚至要用很久才能消化,但是只要能见坚持着看完,你会发现自己对于正则的运用能力就会显著提高。 PHP正则表达式的定义: 用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。 PHP中的正则函数: PHP中有两套正则函数,两者功能差不多,分别为: 一套是由PCRE(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数; 一套由POSIX(Portable Operating System Interface of Unix)扩展提供的。使用以“ereg_”为前缀命名的函数;(POSIX的正则函数库,自PHP5.3以后,就不在推荐使用,从PHP6以后,就将被移除) 由于POSIX正则即将推出历史舞台,并且PCRE和perl的形式差不多,更利于我们在perl 和php之间切换,所以这里重点介绍PCRE正则的使用。 PCRE正则表达式 PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。 在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。 正则中重要的几个概念有:元字符、转义、模式单元(重复)、反义、引用和断言,这些概念都可以在文章[1]中轻松的理解和掌握。 常用的元字符(Meta-character):

正则表达式

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 字符描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,“z o+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“d o”。?等价于{0,1}。 {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“fo o o ood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o?”将匹配单个“o”,而“o+”将匹配所有“o”。 点匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[\s\S]”的模式。

几种PHP提取字符串中的数字

第一种方法,使用正则表达式: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $reg='/(\d{3}(\.\d+)?)/is';//匹配数字的正则表达式 preg_match_all($reg,$str,$result); if(is_array($result)&&!empty($result)&&!empty($result[1])&&!empty($result[1][0])){ return $result[1][0]; } return ''; } 第二种方法,使用in_array方法: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $temp=array('1','2','3','4','5','6','7','8','9','0'); $result=''; for($i=0;$i

很完整的一篇正则表达式总结

1、正则表达式-完结篇---工具类开发--- ? 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 '/.+/', 'email'=> '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', 'url'=> '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/ \?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/', 'currency'=> '/^\d+(\.\d+)?$/', 'number'=> '/^\d+$/', 'zip'=> '/^\d{6}$/', 'integer'=> '/^[-\+]?\d+$/', 'double'=> '/^[-\+]?\d+(\.\d+)?$/',

5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2'english'=> '/^[A-Za-z]+$/', 'qq'=> '/^\d{5,11}$/', 'mobile'=> '/^1(3|4|5|7|8)\d{9}$/', ); //定义其他属性 private$returnMatchResult=false; //返回类型判断 private$fixMode=null; //修正模式 private$matches=array(); //存放匹配结果 private$isMatch=false; //构造函数,实例化后传入默认的两个参数 public function __construct($returnMatchResult=false,$fixMode=null){ $this->returnMatchResult=$returnMatchResult; $this->fixMode=$fixMode; } //判断返回结果类型,为匹配结果matches还是匹配成功与否isMatch,并调用返回方法 private function regex($pattern,$subject){ if(array_key_exists(strtolower($pattern), $this->validate)) $pattern=$this->validate[$pattern].$this->fixMode; //判断后再连接上修正模式作为匹配的正则表达式 $this->returnMatchResult ?

PHP正则表达式二徐枭雄课堂笔记

正则表达式 1.什么是正则表达式 a)例子:’//’;这就是正则表达 式 b)乱七八糟的一堆字符堆砌在一起,神秘的符号,有着 奇特的意义 2.和正则表达式相识的事物? a)乱/看不懂/神秘/意义 医生的字只有医院的人能看懂 道士的符只有道士明白 女人的心只有女人能懂 正则表达式只有程序员能看懂(所有的高级语言中都有正则表达式) 3.学习正则表达式可以做什么、 a)操作字符串时正则表达式的唯一作用 验证用户名长度是否合法 验证密码是否符合标准 验证手机号 验证URL地址 验证邮箱

BBS编辑器 Qq聊天表情 新闻采集器小偷程序 4.看看正则表达式的一些特点 a)1.正则表达式也是一个字符串 b)2.由特殊意义的字符组成的字符串 c) 3.具有一定的编写规则,也是一种模式 d)4.看做是一种编程语言 因为是用一些特殊字,按照规则编写出来的字符串,形成一种模式-正则表达式。 注意:如果正则表达式,不和函数一起使用,则他就是一个普通的字符串而已。如果把正则表达式放入到函数中一起使用,才能发挥出正则表达式的作用。 比如:将正则表达式放入到分分隔函数,哪可以用这个正则表达式去分隔字符串。 总结:正则弊端是就是通过构建具有特定规则的模式了,在于输入的字符串信息进行比较,分隔,查找,替换等工作。 在实际应用中记住一点:能使用字符串处理函数来完成的就不要使用正则表达式来完成。愿意:效率低。

5.PHP中提供了两套正则表达式函数库 a)Posix 扩展正则表达式函数-》ereg b)Perl 兼容正则表达式函数->preg (两套函数库功能一样,但是perl效率高,所以官方推荐使用perl) 6.学习正则表达式时,有两方面学习 a)1.正则表达式的模式如何编写 b)2.学习正则表达式的强大处理函数 7.正则表达式的语法(分4部) a)1.正则定界符 b)2.正则表达式中的原子 c) 3.正则表达式中的元字符(原子修正符) d)4.正则表达式的模式修正符 8.正则表达式的定界符 a)正则表达式的定界符是用来声明正则表达式的边界符 号。 正则表达式常用个的边界符是’/‘实际上任何非数字字

Java中的正则表达式+--++示例详解

Java中的正则表达式 众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。 大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台。 因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。 \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \r 回车 ('\u000D') \d 数字等价于[0-9] \D 非数字等价于[^0-9] \s 空白符号 [\t\n\x0B\f\r] \S 非空白符号 [^\t\n\x0B\f\r] \w 单独字符 [a-zA-Z_0-9] \W 非单独字符 [^a-zA-Z_0-9] \f 换页符 \e Escape \b 一个单词的边界 \B 一个非单词的边界 \G 前一个匹配的结束 ^为限制开头 ^java 条件限制为以Java为开头字符 $为限制结尾 java$ 条件限制为以java为结尾字符 .为限制一个任意字符 java.. 条件限制为java后除换行外任意两个字符 加入特定限制条件「[]」 [a-z] 条件限制在小写a to z范围中一个字符 [A-Z] 条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9] 条件限制在小写0 to 9范围中一个字符

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.wendangku.net/doc/1c13595619.html,, 1_2@987-6.54,当然符合这个模式的不全是合法的 email 地址,但至少可以做一次初步筛选, 筛掉 a.b,c@d 等肯定不是 email 地址的字符串.再比如,找出所有符合 yyy.yyy.yyy.yyy 模 式的字符串(也就是 IP 地址),要求 y 是 0-9 的数字,IP 地址的每一部分可以有 1-3 个 y 字 符. 如果要用 grep 查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串 呢?从这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息: 字符类(Character Class):如上例的 x 和 y,它们在模式中表示一个字符,但是取 值范围是一类字符中的任意一个. 数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个 x 字符,IP 地址 的每一部分可以有 1-3 个 y 字符 各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,用普通字符@和. 隔开,IP 地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述.为 了表示位置关系,还有位置限定符(Anchor)的概念,将在下面介绍.
规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一 起表示一个模式,这就是正则表达式(Regular Expression).例如 email 地址的正则表达式 可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP 地址的正则表达式可以 写成[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.下一节介绍正则表达式的语法, 我们先看看正则表达式在 grep 中怎么用.例如有这样一个文本文件 testfile:
192.168.1.1
第 1 页 共 10 页

正则表达式介绍和例子

正则表达式 含义:编写字符串处理的程序或网页时,会有查找符合某复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。它是记录文本规则的代 码。 元字符 用来代替字符的符号 注:\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等 正则表达式中的空格会当成空格匹配。(输入几个空格就匹配几个) 非打印字符 非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列: 字符描述 \cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M 或回车符。x 的值必须为A-Z 或a-z 之则,将 c 视为一个原义的'c' 字符。 \f 匹配一个换页符。等价于\x0c 和\cL。 \n 匹配一个换行符。等价于\x0a 和\cJ。 \r 匹配一个回车符。等价于\x0d 和\cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

限定符 重复:表现重复时用的是大括号{}和* + ?,表示范围时用的是中括号[],中括号里面是只选其中一个的组合。表达分组时用圆括号(),一个圆括号表示一个意思。 ●字符类[],用来表示取字符的范围区间,用中括号括起来 [0-9]代表\d [a-z0-9A-Z]表示\w ●分支条件,用|表示或者的关系。 ●贪婪与懒惰、最先开始匹配拥有最高优先权 *、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。 .*表示尽可能匹配多的字符 .*?表示尽可能少的字符 例如:字符串aabab,用贪婪匹配a.*b得到aabab,用懒惰匹配a.*?b得到

php正则验证中文

一、利用正则表达式验证中文 注意UTF8编码和GB2312有所不同。 1.UTF8下的中文验证 $str1 = "编程"; $str = "php编程"; if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) { print("该字符串全部是中文"); } else { print("该字符串不全部是中文"); } 2.GB2312下中文的验证 if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $st_name){ print("该字符串全部是中文"); } else { print("该字符串不全部是中文"); } PHP中用正则表达式验证中文的有以下问题需注意 例如: str = '中华人民共和国123456789abcdefg'; echo preg_match("/^[\u4e00-\u9fa5_a-zA-Z0-9]{3,15}",strName); 运行一下上面这段代码,看会有什么提示信息? Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 3 in F:\wwwroot\php\test.php on line 2 原来,PHP正则表达式中不支持下列 Perl 转义序列:\L, \l, \N, \P, \p, \U, \u, or \X 在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串。原来的十六进制转义序列 \xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。 所以,可以这样来解决 preg_match("/^[\x80-\xff_a-zA-Z0-9]{3,15}",strName); 一开始很是疑惑\x80-\xff只能匹配128个字符怎么就可以匹配成千上万的中文呢,原来\x80-\xff只是匹配中文双字节中的一个字节, 所以上面的正则表达式可以匹配范围是128*128个双字节字符。

excelvba正则表达式从实例开始

'EXCEL VBA 正则表达式从实例开始 所有代码都测试过 ' ' '[2011-09-09:'[2010-08-08:'数据验证经常出现的情况是,需要验证和处理大量的文本内容,有时候需要查找字符串,有时候要按条件替换,并且这些待处理的问题还是有一定的规律可循的,但是无法通过枚举的方式挨个验证,这个时候就需要正则表达式来帮忙。 '1.正则表达式(Regular Expression)基础 ' 正则表达式是通用的文本搜索和处理方案,它的知识不是VBA独有的,基本上每种语言都内置了正则表达式的功能。正则表达式的基础知识不是这里的重点,需要的朋友可以Google一下,或者参看下面的一些入门教程: 'tutorials/regex/ '''中的正则表达式应用 ' 在VBA中使用正则表达式,可以通过下列途径实现: '创建正则表达式对象: '前期绑定:在VBA代码编辑器中的"Tools"菜单中,选中"References...",然后引用Microsoft VBScript Regular Expressions 类库,然后直接定义对象:Dim reg As New RegExp。 '后期绑定:使用CreateObject方法定义对象:CreateObject("")。 '前一种方式的优点是可以有编辑器的Intellisense支持 'RegExp对象的属性: 'Global - 设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如果搜索应用于整个字符串,Global 属性的值应该为 True,否则其值为False。默认的设置为True。 'Multiline - 返回正则表达式是否具有标志m, 缺省值为False。如果指定的搜索字符串分布在多行,这个属性是要设置为True的。 'IgnoreCase - 设置或返回一个Boolean值,指明模式搜索是否区分大小写。如果搜索是区分大小写的,则 IgnoreCase 属性应该为False;否则应该设为True。缺省值为True。 'Pattern - 设置或返回被搜索的正则表达式模式。被搜索的正则字符串表达式。它包含各种正则表达式字符。 'RegExp对象的方法: 'Execute - 对指定的字符串执行正则表达式搜索。需要传入要在其上执行正则表达式的文本字符串。正则表达式搜索的设计模式是通过 RegExp对象的Pattern来设置的。Execute 方法返回一个Matches集合,其中包含了在string中找到的每一个匹配的Match对象。如果未找到匹配,Execute将返回空的Matches集合。 'Replace -替换在正则表达式查找中找到的文本 'Test - 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。属性对Test方法没有影响。如果找到了匹配的模式,Test方法返回True;否则返回False。 'MatchCollection对象与Match对象 '匹配到的所有对象放在MatchCollection集合中,这个集合对象只有两个只读属性: 'Count: 匹配到的对象的数目 'Item:集合的又一通用方法,需要传入Index值获取指定的元素。

PHP正则表达式&字符串处理

第四课:正则表达式&字符串处理 程序原理:处理数据(Web上的数据) 数据:类型字符串是程序中的一种最基本的类型 serialize 正则就是处理字符串的一种方式 处理字符串:查找、替换、删除、匹配、分割 1、正则表达式简介 正则表达式介绍 正则表达式:Regular Expression,是用于描述字符排列模式的一种语法规则。正则表达式是查找和替换、切割字符串模式的简洁和灵活的表示方法。 正则表达式的用途: 在unix(linux)系统中,可以在编辑器中使用正则表达式实现对字符的搜索及处理;各种编程语言(c/c++,perl,java,javascript)也可以使用正则表达式实现对字符的模式分割、匹配、查找及替换操作。 正则表达式早期仅用于Unix系统程序,现在已被绝大多数系统、程序所支持。 PHP支持两种风格的正则表达式函数:一种是由PCRE(Perl Compatible Regular Expression)库提供的;另一种是由POSIX(Portable Operation System Implementation for unix,UNIX可移植操作系统实现接口)扩展库提供的。前者使用以“preg_”为前缀命名的函数;后者使用以“ereg_”为前缀命名的函数。两者功能相似,只是执行效率略有差异。PERL库的函数(preg_)执行效率略高。ereg_*相关函数在php6中将不被支持(从PHP5.3.0开始已经删除),不推荐使用。 正则语法记忆、理解 PHP函数 2、正则表达式的语法规则 正则表达式描述了一种字符串的排列模式,主要用于字符串的模式分割、匹配、查找及替换等操作。正则表达式是主要由原子(普通字符,如单个英文字符、数字、特殊字符等)、元字符(有特殊功用的字符)以及模式修正字符组成。一个正则表达式中至少包含一个原子。他们各自功能和含义有所不同,下面将分别讲述正则表达式的组成元素及其语法规则。 $content = preg_split('//i',$content);原子:通常是最基本一个字符。 元字符:特殊字符,比如^,$。 模式修正字符:i,m等。9.php 模式修正符: 模式修正符是标记在整个模式之外的.

正则表达式大于50万的判断js与php写法

正则表达式大于50万的判断js与php写法