搜档网
当前位置:搜档网 › PHP正则表达式&字符串处理

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

PHP正则表达式&字符串处理
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

模式修正符:

模式修正符是标记在整个模式之外的.

i :模式中的字符将同时匹配大小写字母.

m :字符串视为多行.

s :将字符串视为单行,换行符作为普通字符.

x :将模式中的空白忽略.

A :强制仅从目标字符串的开头开始匹配.

D :模式中的美元元字符仅匹配目标字符串的结尾.

U :匹配最近的字符串.

https://www.sodocs.net/doc/7a9064340.html,

2.1普通转义字符

普通转义字符是一种原子。正则表达式所使用的普通转义字符见下表:

原子说明

\d匹配一个数字;等价于[0-9]

\D匹配除数字以外任何一个字符;等价于[^0-9] ;\d取反

\w匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]

\W匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]

\s匹配一个空白字符;等价于[ \f\n\r\t\v]。包括空格。

\S匹配除空白字符以外任何一个字符;等价于[^ \f\n\r\t\v]

\f 匹配一个换页符;等价于\x0c 或\cL

\n匹配一个换行符;等价于\x0a 或\cJ

\r匹配一个回车符;等价于\x0d 或\cM

\t匹配一个制表符;等价于\x09 或\cI

\v 匹配一个垂直制表符;等价于\x0b 或\cK

\oNN 匹配一个八进制数字

\xNN 匹配一个十六进制数字

\cC 匹配一个控制字符

参考1.php

2.2 字符类(字符集)和范围:

任何包含在方括号[]中的内容都是一个字符类——一个被匹配字符所属的字符

集合。"[]"中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。

例:

[abc]表示匹配a或b或c中的一个

[a-z]表示所有a到z之间的字符中的一个

[A-Z]匹配所有大写字母中的一个

[a-zA-Z]表示任何的大小写字母中的一个

[^a-z]匹配任何不在a到z之间的字符(^表示否)

[0-9]匹配所有的数字 \d

[0-9.-]匹配所有的数字,点号和减号

注意:

a.[]中的内容只表示一个字符。被匹配的文本中只要有[]中的任何一个字符,就匹配成功。

b.当把^放在方括号里面第一个位置时,表示否;如果^在方括号中的其他位置,表示是一个字符^。当^在[]中的第一个位置时,如果要匹配它本身,要用\转义。当该符号用在方括号外面时,一般表示正则表达式的开始。

c.当-不在a和z,A和Z,0和9之间,单独出现时,表示是一个字符-。

d.在[]中的特殊符号,不用转义。但是几个特殊字符除外:] 要转义,^在第一个位置要转义,反斜杠\,-要转义。三个反斜杠\代表一个\(4个也代表一个反斜杠)。

参考2.php

var_dump(preg_match_all('/[^a^\]]/', '33]3anba',$t)); //非a非]

2.3 重复匹配

重复

* 表示这个模式可以被重复0次,1次或多次 a{0,}

+ 表示这个模式可以被重复1次或多次 a{1,}

? 表示这个模式可以被重复0次或1次 a{0,1}

计数

{5} 表示匹配5次

{2,} 表示至少匹配2次

{0,5} 表示至多匹配5次(不能写成{,5})

{2,5} 表示最少匹配2次,最多匹配5次

注:,后面不能有空格

参考3.php

2.4 开始或结尾

^ (或\A)用于正则表达式的开始

$ (或\Z)用于正则表达式的结尾

例:

^andy 表示在字符串开始处是 andy

.cn$ 表示在字符串结尾处是 .cn

^[a-z]$表示只包含a到z之间一个字符的字符串。

参考 4.php

\B相当于\w ?

元字符“\b”对单词(指\w)的边界进行匹配;“\B”对单词的内部进行匹配。

例如:在字符串“This island is a beautiful land”中使用/\bis\b/可以匹配单词“is”,而与“This”或者“island”无关。/\bis/与单词左边界匹配,可以匹配单词“is”和“island”中的“is”;/\Bis/不与单词左边界匹配,可以匹配单词“This”中的“is”。/\Bis\B/ 将明确的指示不与单词的左、右边界匹配,只匹配单词的内部。所以在这个例子中没有匹配结果。

参考 5.php

2.5 元字符“.”

元字符“.”匹配除换行符外任何一个字符,相当于[^\n](Unix系统)或[^\r\n](Windows系统)。不是html的换行
。例如:/pr.y/可以匹配目字符串“prey”、“pray”或“pr%y”等。

通常,可以使用“.*”组合来匹配除换行符外的任何字符串。在一些书籍中也称其为“全匹配符”或“单含匹配符”。例如:/a.*z/ 表示可以匹配以字母“a”开头,字母“z”结束的任意不包括换行符的字符串。“. +”也可以完成类似的匹配功能,所不同的是其至少匹配一个字符。例如:/a.+z/将不匹配字符串“az”。参考 6.php

2.6 选择符

元字符“|”又称模式选择符(或)。在正则表达式中匹配两个或更多的选择之一。例如:在字符串“There are many apples and pears.”中,/apple|pear/在第一次运行时匹配“apple”;再次运行时匹配“pear”。也可以继续增加选项,如/apple|pear|banana|lemon/。

com|cn|net表示匹配com、cn或net

参考7.php

2.7 子表达式(又称原子、模式单元或组)

元字符“()”将其中的正则表达式变为原子(或称模式单元)使用。与数学表达式中的括号类似,“()”可以作为一个单元被单独使用。

例如:/(Dog)+/匹配的“Dog”、“DogDog”、“DogDogDog”……,因为紧接着“+”前的原子是用元字符“()”括起来的字符串“Dog”。

参考7-2.php 7-3.php

2.8 匹配特殊字符

特殊字符有一般加\,如要匹配$ ,则使用 \$

一些特殊字符:\ ^ $ . | ( ) * + ? { } -

% , \ * " ' | \s \t < > & ~

注意:在PHP中,一般将正则表达式模式包括在一个单引号字符串中。使用双引号可能会出现一些问题。

当这些特殊字符放在[]中时,不需要转义(除反斜杠\、右方框号]、^在第一个位置、-)。

参考8.php

if(preg_match('/[\^\($#\]]/', $username))

{

echo '有非法字符';

}

2.9 模式匹配的顺序

在使用正则表达式时,需要注意匹配的顺序。通常,正则表达式按照由左至右的顺序依次匹配。列出了其他字符的匹配顺序:

顺序元字符说明

1 () 模式单元

2 ? * + {} 重复匹配

3 ^ $ \b \B \A \Z 边界限制

4 | 模式选择

2.10 模式修正符(Pattern Modifiers)

模式修正符扩展了正则表达式在字符匹配、替换操作时的某些功能。这些扩展或者说修正增强了正则表达式的处理能力。模式修正符一般标记于整个模式之外,并且可以组合使用,如“/apple/i”、“/cat|dog/Uis”等。下面列出了一些常用的模式修正符及其功能说明:

模式修正符说明

i 可同时匹配大小写字母

m 将字符串视为多行

s 将字符串视为单行,换行符作为普通字符看待

x 模式中的空白忽略不计

S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析

U 匹配到最近的字符串

e 将替换的字符串作为表达式使用

参考9.php

3、PHP中的正则表达式相关函数

在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的。PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数。

两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势。

PCRE相关函数preg_*

preg_match()用于查找

int preg_match (string $pattern, string $content [, array $matches])

preg_match ()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其中。$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只作一次匹配,最终返回0或1的匹配结果数。参考preg_match.php

这是一个简单动态文本串匹配实例。假设当前系统时间是“2006年8月17日13点25分”,将输出如下的内容。

匹配的时间是:2006-08-17 01:25 pm

当前日期是:2006-08-17

当前时间是:01:25 pm

preg_match_all() 用于获取匹配的内容

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。本函数返回整个模式匹配的次数(可能为0),如果出错返回false。下面是一个将文本中的URL链接地址转换为HTML代码的示例。

$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与

括号中的模式单元所匹配的内容,以此类推。

参考preg_match_all.php

preg_replace() 用于替换

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。把替换之后的结果返回,做为函数的返回值。

参考preg_replace.php

preg_split()用于分割

array preg_split ( string pattern, string subject [, int limit [, int flags]] )

返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。

如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。

参考preg_split.Php

4、PHP字符串操作相关内置函数

字符串的整理 trim() ltrim() rtrim()(或chop())参考trim.php

trim:去掉前后的空格(或其他字符)

格式化字符串nl2br() printf() sprintf() strtoupper() strtolower() ucfirst() ucwords()

用字符串函数连接和分割字符串

explode() implode() join() strtok() substr()

字符串的排序 strcmp() strcasecmp() strnatcmp() 参考strcmp.php

得到字符串的长度strlen()参考strlen1.php strlen2.php

在字符串中查找字符串 strstr() strchr() strrchr() stristr()

查找字符串的位置 strpos() strrpos() 参考 strpos.php

替换子字符串 str_replace() substr_replace() 参考str_replace.Php

5、JavaScript正则

xmphp框架中的 Check.class.js

总结:

对于同样的功能,正则表达式函数的运行效率要低于字符串函数。如果使用字符串函数就可以实现的功能,就使用字符串函数。但如果单个正则表达式可以完成的任务,需要编写多个字符串函数来实现,则还是用正则表达式函数比较合适。

课后实战:

写以下几个正则表达式:手机号、邮编、身份证、QQ、域名、电子邮箱、IP、网址、用户名。将功能写在Check.class.php和Check.class.js类中。

参考preg_match_all.php,发布文章时,把网址替换成带链接的。

注册时,判断邮件是否正确(js检测、php检测)

如何匹配'ababababab',里面有5个a? .*a.* a.* a.* a.* a.*

csharp正则表达式

学习笔记:正则表达式 2011-8-29 一.正则表达式 正则表达式(Regex)是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。 一个正则表达式就是由普通的字符及特殊字符(称为元字符符)组成的文字模式。该模式秒杀在查找文章主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 正则表达式的常用元字符(全为英文状态,注意可以代表的字符种类和个数): 元字符含义 .(点) 可以匹配除”\n”外的任意一个字符 [](中括号) 可以匹配中括号内的任意一个字符 例如,"[abc]" 匹配"plain"中的"a" |(或符号) 可以匹配或符号两边的任意一个字符,优先级比较低 匹配x 或y。例如"z|food" 可匹配"z" 或"food"。 正则表达式的常用限定符(全为英文状态): 元字符含义 *(星号) 其限定的表达式出现次数等于或大于0次 例如,"zo*"可以匹配"z"、"zoo" +(加号) 其限定的表达式至少出现1次 例如,"zo+"可以匹配"zoo",但不匹配"z" ?(问号) 其限定的表达式出现1次或0次 例如,"a?ve?"可以匹配"never"中的"ve" {n} 其限定的表达式出现次数确定n次(n≥0) {n,} 其限定的表达式至少出现n次 {n,m} 其限定的表达式出现的次数为≥n次,≤m次(m>n) 还有几个重要的符号: 符号含义 ^ (Shift+6)匹配输入的开始位置 非的意思。例如[^a-z],匹配非a-z的一个字符。 $ (Shift+4)匹配输入的结尾 \将下一个字符标记为特殊字符或字面值 例如:想匹配”.”时或其他特殊字符时,需写为的”\.” ()(小括号) 1.改变优先级 2.分组,提取信息 需要熟记一些简写: \d = [0-9]

正则表达式

1.验证用户名和密码:("^[a-zA-Z]\w{5,15}$")正确格式:"[A-Z][a-z]_[0-9]"组成,并且第一个字必须为字母6~16位; 2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx; 3.验证手机号码:"^1[3|4|5|7|8][0-9]\\d{8}$"; 4.验证身份证号(15位或18位数字):"\d{14}[[0-9],0-9xX]"; 5.验证Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); 6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$"); 7.整数或者小数:^[0-9]+([.][0-9]+){0,1}$ 8.只能输入数字:"^[0-9]*$"。 9.只能输入n位的数字:"^\d{n}$"。 10.只能输入至少n位的数字:"^\d{n,}$"。 11.只能输入m~n位的数字:"^\d{m,n}$"。 12.只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 13.只能输入有两位小数的正实数:"^[0-9]+(\.[0-9]{2})?$"。 14.只能输入有1~3位小数的正实数:"^[0-9]+(\.[0-9]{1,3})?$"。 15.只能输入非零的正整数:"^\+?[1-9][0-9]*$"。 16.只能输入非零的负整数:"^\-[1-9][0-9]*$"。 17.只能输入长度为3的字符:"^.{3}$"。 18.只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。 19.只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。 20.只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。 21.验证是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。 22.只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。 23.验证URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 24.验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"10"~"12"。 25.验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"、"10"~"29"和“30”~“31”。 26.获取日期正则表达式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日? 评注:可用来匹配大多数年月日信息。 27.匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 28.匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 29.匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 30.匹配首尾空白字符的正则表达式:^\s*|\s*$

JS正则表达式大全

JS正则表达式大全 JS正则表达式大全【1】 正则表达式中的特殊字符【留着以后查用】字符含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" * 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa + 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa ? 匹配前面元字符0次或1次,/ba*/将匹配b,ba (x) 匹配x保存x在名为$1...$9的变量中 x|y 匹配x或y {n} 精确匹配n次 {n,} 匹配n次以上 {n,m} 匹配n-m次 [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) [^xyz] 不匹配这个集合中的任何一个字符 [\b] 匹配一个退格符 \b 匹配一个单词的边界 \B 匹配一个单词的非边界 \cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M \d 匹配一个字数字符,/\d/ = /[0-9]/ \D 匹配一个非字数字符,/\D/ = /[^0-9]/ \n 匹配一个换行符 \r 匹配一个回车符 \s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 \S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ \t 匹配一个制表符 \v 匹配一个重直制表符 \w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配

正则表达式

本文分十四个类别对正则表达式的意义进行了解释,这十四各类别是:字符/字符类/预定义字符类/POSIX字符类/https://www.sodocs.net/doc/7a9064340.html,ng.Character类/Unicode块和类别的类/边界匹配器/Greedy数量词/Reluctant数量词/Possessive数量词/Logical运算符/Back引用/引用/特殊构造。 1.1.字符 x 字符 x。例如a表示字符a \\ 反斜线字符。在书写时要写为\\\\。(注意:因为java在第一次解析时把\\\\解析成正则表达式\\,在第二次解析时再解析为\,所以凡是不是1.1列举到的转义字符,包括1.1的\\,而又带有\的都要写两次) \0n 带有八进制值 0的字符 n (0 <= n <= 7) \0nn 带有八进制值 0的字符 nn (0 <= n <= 7) \0mnn 带有八进制值 0的字符 mnn(0 <= m <= 3、0 <= n <= 7) \xhh 带有十六进制值 0x的字符 hh \uhhhh 带有十六进制值 0x的字符 hhhh \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义符 ('\u001B') \cx 对应于 x 的控制符 1.2.字符类 [abc] a、b或 c(简单类)。例如[egd]表示包含有字符e、g或d。 [^abc] 任何字符,除了 a、b或 c(否定)。例如[^egd]表示不包含字符e、g或d。 [a-zA-Z] a到 z或 A到 Z,两头的字母包括在内(范围) [a-d[m-p]] a到 d或 m到 p:[a-dm-p](并集) [a-z&&[def]] d、e或 f(交集) [a-z&&[^bc]] a到 z,除了 b和 c:[ad-z](减去) [a-z&&[^m-p]] a到 z,而非 m到 p:[a-lq-z](减去) 1.3.预定义字符类(注意反斜杠要写两次,例如\d写为\\d) . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] 1.4.POSIX 字符类(仅 US-ASCII)(注意反斜杠要写两次,例如\p{Lower}写为\\p{Lower})

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)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

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]*$ 元字符及其在正则表达式上下文中的行为: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转

正则表达式语法完整版

正则表达式基础知识 一个正则表达式就是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

下面看几个例子: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的字符串。 '*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。下面是几个例子: "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。 也可以使用范围,用大括号括起,用以表示重复次数的范围。 "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。 还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 还有一个'|',表示“或”操作: "hi|hello":表示一个字符串里有"hi"或者"hello"; "(b|cd)ef":表示"bef"或"cdef"; "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c"; '.'可以替代任何字符: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符); 方括号表示某些字符允许在一个字符串中的某一特定位置出现: "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b"); "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");"^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; "[0-9]+":表示一个以上的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。 你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。 为了逐字表达,必须在"^.$()|*+?{\"这些字符前加上转移字符'\'。 请注意在方括号中,不需要转义字符。

正则表达式

[23:39:35] 王尧说:"^\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+((-\w+)|(\.\w+))*)\+\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$ //Emil "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码 "^(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+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$ 匹配网址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]*$ 漢字 Private Ps_KanjiRegex As String = "\u00A0-\u303F\u3200-\u33CF\u4E00-\uFF60\uFFA0-\uFFE5" ''入力可能漢字のコード(正規表現チェック用)

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):

几种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

正则表达式和字符

一、正则表达式 除非您以前使用过正则表达式,否则您可能不熟悉此术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。 正则表达式示例 例如,您很可能使用? 和* 通配符来查找硬盘上的文件。通配符匹配文件名中的单个字符,而* 通配符匹配零个或多个字符。像data?.dat 这样的模式将查找下列文件: data1.dat data2.dat datax.dat dataN.dat 使用* 字符代替? 字符扩大了找到的文件的数量。data*.dat 匹配下列所有文件: data.dat data1.dat data2.dat data12.dat datax.dat dataXYZ.dat 尽管这种搜索方法很有用,但它还是有限的。和* 通配符的能力引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。

二、正则表达式语法 正则表达式是一种文本模式,包括普通字符(例如,a 到z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。 正则表达式示例 下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:

三、生成正则表达式 正则表达式的结构与算术表达式的结构类似。即,各种元字符和运算符可以将小的表达式组合起来,创建大的表达式。 分隔符 通过在一对分隔符之间放置表达式模式的各种组件,就可以构建正则表达式。对于JScript,分隔符是正斜杠(/) 字符。例如: /expression/ 在上面的示例中,正则表达式模式(expression) 存储在RegExp对象的Pattern属性中。正则表达式的组件可以是单个字符、字符集、字符的范围、在几个字符之间选择或者所有这些组件的任何组合。 四、优先级顺序 正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。 运算符 下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

正则表达式快速记忆法

要想学会正则表达式,理解元字符是一个必须攻克的难关。 不用刻意记 .:匹配任何单个字符。 例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“bg”,但是不匹配“buug”,“b..g”可以匹配“buug”。 [ ] :匹配括号中的任何一个字符。 例如正则表达式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”等价于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母,“[A-Za-z0-9]”可以匹配任何的大小写字母或者数字。 ( ) :将()之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。把一些字符表示为一个整体。改变优先级、定义提取组两个作用。 | :将两个匹配条件进行逻辑“或”运算。 'z|food'能匹配"z"或"food"。'(z|f)ood'则匹配"zood"或"food"。 *:匹配0至多个在它之前的子表达式,和通配符*没关系。 例如正则表达式“zo*”能匹配“z”、“zo”以及“zoo”;因此“.*”意味着能够匹配任意字符串。"z(b|c)*"→zb、zbc、zcb、zccc、zbbbccc。"z(ab)*"能匹配z、zab、zabab(用括号改变优先级)。 + :匹配前面的子表达式一次或多次,和*对比(0到多次)。 例如正则表达式9+匹配9、99、999等。“zo+”能匹配“zo”以及“zoo”,不能匹配"z"。 ? :匹配前面的子表达式零次或一次。 例如,"do(es)?"可以匹配"do"或"does"。一般用来匹配“可选部分”。 {n} :匹配确定的n次。 "zo{2}"→zoo。例如,“e{2}”不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”。 {n,} :至少匹配n次。 例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeeeed”中的所有“e”。 {n,m}:最少匹配n次且最多匹配m次。 “e{1,3}”将匹配“seeeeeeeed”中的前三个“e” ^(shift+6):匹配一行的开始。 例如正则表达式“^regex”能够匹配字符串“regex我会用”的开始,但是不能匹配“我会用regex”。 ^另外一种意思:非!(暂时不用理解) $ :匹配行结束符。 例如正则表达式“浮云$”能够匹配字符串“一切都是浮云”的末尾,但是不能匹配字符串“浮云呀”

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)正则表达式的定界符是用来声明正则表达式的边界符 号。 正则表达式常用个的边界符是’/‘实际上任何非数字字

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.sodocs.net/doc/7a9064340.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 页

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个双字节字符。

常用正则表达式字符及其含义

1. [……] : 匹配括号中的任何一个字符. [^……] : 匹配不在括号中的任何一个字符. \w : 匹配任何一个字符(a~z , A~Z , 0~9). \W : 匹配任何一个空白字符. \s : 匹配任何一个非空白字符. \S : 与任何非单词字符匹配. \d : 匹配任何一个数字. \D : 匹配任何一个非数字. [\b] : 匹配一个退格键字母. {n,m} : 最少匹配前面表达式n次,最大为m次. {n,} : 最少匹配前面表达式n次. {n} : 恰好匹配前面表达式为n次. ? : 匹配前面表达式0或1 次{0,1} + : 至少匹配前面表达式1 次{1,} * : 至少匹配前面表达式0次{0,} | : 匹配前面表达式或后面表达式. (…) : 在单元中组合项目. ^ : 匹配字符串的开头. $ : 匹配字符串的结尾. \b : 匹配字符边界. \B : 匹配非字符边界的某个位置.

2.举几个常用的正则表达式: (1)验证电子邮件. \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 或 \S+@\S+\ .\S+ (2) 验证网址: HTTP://\S+\ .\S+ : 验证网址为大写字母 . http://\S+\ . \S + : 验证网址为小写字母. (3) 验证邮政编码: \d{6} (4) 其他 [0-9] : 表示0~9 十个数字. \d* : 表示任意个数字. \d{3,4}-\d{7,8} : 表示中国大陆的固定电话号码. \d{2}-\d{5} : 验证由两位数字. 一个连字符再加5位数字组成的ID号. <\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*> : 匹配HTML标记.

相关主题