今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx
- 文档编号:18983206
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:30
- 大小:30.85KB
今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx
《今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx》由会员分享,可在线阅读,更多相关《今天用到正则表达式爽来php正则与js正则全都找了点列出来大家共享Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
}
//由于时间的模式明显,也可以简单的匹配
/([\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.?
匹配前面的子表达式零次或一次
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 今天 用到 正则 表达式 php js 全都 列出 大家 共享
![提示](https://static.bdocx.com/images/bang_tan.gif)