今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx

上传人:b****6 文档编号:18983206 上传时间:2023-01-02 格式:DOCX 页数:30 大小:30.85KB
下载 相关 举报
今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx_第1页
第1页 / 共30页
今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx_第2页
第2页 / 共30页
今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx_第3页
第3页 / 共30页
今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx_第4页
第4页 / 共30页
今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx

《今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx》由会员分享,可在线阅读,更多相关《今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。

今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx

}

//由于时间的模式明显,也可以简单的匹配

/([\d-]{10})([\d:

]{5}[ap]m)/&

$content,$m))

当前日期是:

.$m[1].&

当前时间是:

.$m[2].&

gt;

这是一个简单动态文本串匹配实例。

假设当前系统时间是“2006年8月17日13点25分”,将输出如下的内容。

2006-08-1701:

25pm

2006-08-17

01:

2.ereg()和eregi()

ereg()是POSIX扩展库中正则表达式的匹配函数。

eregi()是ereg()函数的忽略大小写的版本。

二者与preg_match的功能类&

,但函数返回的是一个布尔&

#20540;

,表明匹配成功与否。

需要说明的是,POSIX扩展库函数的第一个参数接受的是正则表达式字符串,即不需要使用分界符。

例如,代码6.2是一个关于文件名安全检验的方法。

代码6.2文件名的安全检验

php

$username=$_SERVER['

REMOTE_USER'

];

$filename=$_GET['

file'

//对文件名进行过滤,以保证系统安全

if(!

ereg('

^[^./][^/]*$'

$userfile))

die('

这不是一个非法的文件名!

'

);

//对用户名进行过滤

$username))

这不是一个无效的用户名'

//通过安全过滤,拼合文件路径

$thefile=&

/home/$username/$filename&

通常情况下,使用与Perl兼容的正则表达式匹配函数perg_match(),将比使用ereg()或eregi()的速度更快。

如果只是查找一个字符串中是否包含某个子字符串,建议使用strstr()或strpos()函数。

3.preg_grep()

arraypreg_grep(string$pattern,array$input)

preg_grep()函数返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。

对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配。

代码6.3给出的示例简单地说明了preg_grep()函数的使用。

代码6.3数组查询匹配

$subjects=array(

&

MechanicalEngineering&

&

Medicine&

SocialScience&

Agriculture&

CommercialScience&

Politics&

);

//匹配所有仅由有一个单词组成的科目名

$alonewords=preg_grep(&

/^[a-z]*$/i&

$subjects);

6.3.2进行全局正则表达式匹配

1.preg_match_all()

与preg_match()函数类&

如果使用了第三个参数,将把所有可能的匹配结果放入。

本函数返回整个模式匹配的次数(可能为0),如果出错返回False。

下面是一个将文本中的URL链接地址转换为HTML代码的示例。

代码6.4是preg_match_all()函数的使用范例。

代码6.4将文本中的链接地址转成HTML

//功能:

将文本中的链接地址转成HTML

//输入:

字符串

//输出:

functionurl2html($text)

//匹配一个URL,直到出现空白为止

preg_match_all(&

/http:

\/\/?

[^\s]&

#43;

/i&

$text,$links);

//设置页面显示URL地址的长度

$max_size=40;

foreach($links[0]as$link_url)

//计算URL的长度。

如果超过$max_size的设置,则缩短。

$len=strlen($link_url);

if($len&

$max_size)

$link_text=substr($link_url,0,$max_size).&

...&

}else{

$link_text=$link_url;

//生成HTML文字

$text=str_replace($link_url,&

ahref='

$link_url'

$link_text&

/a&

$text);

return$text;

//运行实例

$str=“这是一个包含多个URL链接地址的多行文字。

欢迎访问”;

printurl2html($str);

/*输出结果

这是一个包含多个URL链接地址的多行文字。

欢迎访问&

*/

amp;

2.多行匹配

仅仅使用POSIX下的正则表式函数,很难进行复杂的匹配操作。

例如,对整个文件(尤其是多行文本)进行匹配查找。

使用ereg()对此进行操作的一个方法是分行处理。

代码6.5的示例演示了ereg()如何将INI文件的参数赋&

到数组之中。

代码6.5文件内容的多行匹配

$rows=file('

php.ini'

//将php.ini文件读到数组中

//循环遍历

foreach($rowsas$line)

If(trim($line))

//将匹配成功的参数写入数组中

if(eregi(&

^([a-z0-9_.]*)*=(.*)&

$line,$matches))

$options[$matches[1]]=trim($matches[2]);

unset($matches);

//输出参数结果

print_r($options);

提示

这里只是为了方便说明问题。

解析一个*.ini文件,最佳方法是使用函数parse_ini_file()。

该函数直接将*.ini文件解析到一个大数组中。

6.3.3正则表达式的替换

1.ereg_replace()和eregi_replace()

stringereg_replace(string$pattern,string$replacement,string$string)

stringeregi_replace(string$pattern,string$replacement,string$string)

ereg_replace()在$string中搜索模式字符串$pattern,并将所匹配结果替换为$replacement。

当$pattern中包含模式单元(或子模式)时,$replacement中形如“\1”或“$1”的位置将依次被这些子模式所匹配的内容替换。

而“\0”或“$0”是指整个的匹配字符串的内容。

需要注意的是,在双引号中反斜线作为转义符使用,所以必须使用“\\0”,“\\1”的形式。

eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小写。

代码6.6是本函数的应用实例,这段代码演示了如何对程序源代码做简单的清理工作。

代码6.6源代码的清理

$lines=file('

source.php'

//将文件读入数组中

for($i=0;

$i&

count($lines);

//将行末以“\\”或“#”开头的注释去掉

$lines[$i]=eregi_replace(&

(\/\/|#).*$&

$lines[$i]);

//将行末的空白消除

[\n\r\t\v\f]*$&

\r\n&

//整理后输出到页面

echohtmlspecialchars(join(&

$lines));

2.preg_replace()

mixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit])

preg_replace较ereg_replace的功能更加强大。

其前三个参数均可以使用数组;

第四个参数$limit可以设置替换的次数,默认为全部替换。

代码6.7是一个数组替换的应用实例。

代码6.7数组替换

//字符串

$string=&

Name:

{Name}&

br&

\nEmail:

{Email}&

\nAddress:

{Address}&

//模式

$patterns=array(

/{Address}/&

/{Name}/&

/{Email}/&

//替换字串

$replacements=array(

No.5,WilsonSt.,NewYork,U.S.A&

ThomasChing&

tom@&

//输出模式替换结果

printpreg_replace($patterns,$replacements,$string);

输出结果如下。

ThomasChing&

Email:

tom@

Address:

No.5,WilsonSt.,NewYork,U.S.A

在preg_replace的正则表达式中可以使用模式修正符“e”。

其作用是将匹配结果用作表达式,并且可以进行重新运算。

例如:

$html_body=“&

HTML&

Body&

H1&

TEST&

/H1&

MyPicture&

Imgsrc=”my.gif”&

/Body&

/HTML&

”;

//输出结果中HTML标签将全部为小写字母

echopreg_replace(

/(&

\/?

)(\w&

)([^&

]*&

)/e&

\\1'

.strtolower('

\\2'

).'

\\3'

//此处的模式变量\\2将被strtolower转换为小写字符

$html_body);

preg_replace函数使用了Perl兼容正则表达式语法,通常是比ereg_replace更快的替代方案。

如果仅对字符串做简单的替换,可以使用str_replace函数。

6.3.4正则表达式的拆分

1.split()和spliti()

arraysplit(string$pattern,string$string[,int$limit])

本函数返回一个字符串数组,每个单元为$string经正则表达式$pattern作为边界分割出的子串。

如果设定了$limit,则返回的数组最多包含$limit个单元。

而其中最后一个单元包含了$string中剩余的所有部分。

spliti是split的忽略大小版本。

代码6.8是一个经常用到关于日期的示例。

代码6.8日期的拆分

$date=&

08/30/2006&

//分隔符可以是斜线,点,或横线

list($month,$day,$year)=split('

[/.-]'

$date);

//输出为另一种时间&

#26684;

Month:

$month;

Day:

$day;

Year:

$year&

br/&

2.preg_split()

本函数与split函数功能一致。

代码6.9是一个查找文章中单词数量的示例。

代码6.9查找文章中单词数量

$seek=array();

$text=&

IhaveadreamthatonedayIcanmakeit.Sojustdoit,nothingisimpossible!

//将字符串按空白,标点符号拆分(每个标点后也可能跟有空&

$words=preg_split(&

/[.,;

!

\s'

]\s*/&

$text);

foreach($wordsas$val)

$seek[strtolower($val)]&

共有大约&

.count($words).&

个单词。

其中共有&

.$seek['

i'

].&

个单词“I”。

preg_split()函数使用了Perl兼容正则表达式语法,通常是比split()更快的替代方案。

使用正则表达式的方法分割字符串,可以使用更广泛的分隔字符。

例如,上面对日期&

式和单词处理的分析。

如果仅用某个特定的字符进行分割,建议使用explode()函数,它不调用正则表达式引擎,因此速度是最快的。

下面是一些讲解和例子,仅供大家参考和修改使用:

2.&

^\d&

$&

  //非负整数(正整数&

0)

3.&

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

  //正整数

4.&

^((-\d&

)|(0&

))$&

  //非正整数(负整数&

5.&

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

  //负整数

6.&

^-?

\d&

    //整数

7.&

(\.\d&

)?

  //非负浮点数(正浮点数&

8.&

^(([0-9]&

\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]&

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

  //正浮点数

9.&

(\.0&

  //非正浮点数(负浮点数&

10.&

^(-(([0-9]&

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

  //负浮点数

11.&

^(-?

)(\.\d&

  //浮点数

12.&

^[A-Za-z]&

  //由26个英文字母组成的字符串

13.&

^[A-Z]&

  //由26个英文字母的大写组成的字符串

14.&

^[a-z]&

  //由26个英文字母的小写组成的字符串

15.&

^[A-Za-z0-9]&

  //由数字和26个英文字母组成的字符串

16.&

^\w&

  //由数字、26个英文字母或者下划线组成的字符串

17.&

^[\w-]&

(\.[\w-]&

)*@[\w-]&

)&

    //email地址

18.&

^[a-zA-z]&

:

//(\w&

(-\w&

)*)(\.(\w&

)*))*(\?

\S*)?

  //url

19./^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$///年-月-日

20./^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$///月/日/年

21.&

^([w-.]&

)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]&

.)&

))([a-zA-Z]{2,4}|[0-9]{1,3})(]?

)$&

//Emil

22./^((\&

[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?

([0-9]{7,8})(\-[0-9]&

$///电话号码

23.&

^(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地址

24.

25.匹配中文字符的正则表达式:

[\u4e00-\u9fa5]

26.匹配双字节字符(包括汉字在内):

[^\x00-\xff]

27.匹配空行的正则表达式:

\n[\s|]*\r

28.匹配HTML标记的正则表达式:

/&

(.*)&

.*&

\/\1&

|&

(.*)\/&

/

29.匹配首尾空&

的正则表达式:

(^\s*)|(\s*$)

30.匹配Email地址的正则表达式:

\w&

([-&

.]\w&

)*@\w&

([-.]\w&

)*\.\w&

)*

31.匹配网址URL的正则表达式:

//(\\w&

(-\\w&

)*)(\\.(\\w&

)*))*(\\?

\\S*)?

$

32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):

^[a-zA-Z][a-zA-Z0-9_]{4,15}$

33.匹配国内电话号码:

(\d{3}-|\d{4}-)?

(\d{8}|\d{7})?

34.匹配腾讯QQ号:

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

35.

36.

37.元字符及其在正则表达式上下文中的行为:

38.

39.\将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

40.

41.^匹配输入字符串的开始位置。

如果设置了RegExp对象的Multiline属性,^也匹配’\n’或’\r’之后的位置。

42.

43.$匹配输入字符串的结束位置。

如果设置了RegExp对象的Multiline属性,$也匹配’\n’或’\r’之前的位置。

44.

45.*匹配前面的子表达式零次或多次。

46.

47.&

匹配前面的子表达式一次或多次。

等价于{1,}。

48.

49.?

匹配前面的子表达式零次或一次

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1