切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
步步精通正则表达式第一课:认识正则、原子、原子表[复制链接]
发表于 2013-5-18 14:26:12 | 显示全部楼层 |!read_mode!


1,正则表达式都能做什么?
                搜索查找字符串
                字符串替换,比php中相应的函数更智慧,比如:
			<a href="http://www.baidu.com/">百度</a>
			<a href="http://baidu.com">百度2</a>
			<a href="http://sina.com">sina</a>

                        如果我们想把里面的链接替换为www.3g-sec.com那么php字符串替换函数就很啰嗦,而正则替换就很简单。
                字符串的拆分、匹配
                数据抓取、比对、提取
                apache、nginx等web服务器的UrlRewrite也就是大家常见的伪静态地址的实现,以及类似的应用...
                总而言之正则表达式能更高级更有逻辑思维的处理复杂的字符串

2,正则表达式的应用范围?
                php、jsp、asp、js、python、vb、c#、linux shell、mysql....都可以看到正则表达式的影子,而且语法都是想通的,只不过
                相应的操作函数有所不同而已。

3、认识正则:
                正则表达式分为 perl兼容的PCRE模式和posix模式(在php5.3中已经被废除掉了),所以这次咱们就只学习前者就可以了
               
                关于定界符:通常为//        定界符的中间放置我们的正则表达式规则

                关于“原子”:\d匹配第一个任意数字                \D匹配第一个不为数字的字符                \w匹配第一个0-9或a-z或A-Z或_
                                        \s匹配第一个空字符(\f分页  \n换行 \r回车 \t制表 \v垂直制表  空字符 )
                                        \S上一个的反义字符(第一个不是空字符的字符)
                                        匹配顺序为从左往右
                                        原子是最小的匹配单位


4、小例子:
<?php
$str  ='3g-sec team 2013';

//$preg ='/\s/';	//匹配一个空字符
//$preg ='/e/';		//匹配第一个e
$preg ='/\d+/';		//匹配多个连续的数字
if(preg_match($preg,$str,$arr1)){
	echo "找到了";
}else{
	echo "没找到";
}

var_dump($arr1);
?>


5、关于   原子表直接上例子,嘘.....认真体会.....
<?php

$str2 ='http://www.3g-sec.com/111forum.php ';
echo preg_match('/w{4,}/is',$str2) ? 'yes':'no';//匹配大于等于4个w
echo "<hr>";


//现在有个需求:判断$str2如果有数字或空格就echo "非法"
//错误的写法
echo preg_match('/\d\s/',$str2,$arr1)?'非法<hr>':'合法<hr>';
//正确的写法
echo preg_match('/[\d\s]/',$str2,$arr1)?'非法<hr>':'合法<hr>';
//可以总结为:原子表中的原子是或的关系,依次匹配只要有一个原子满足则返回真;非原子表是把原子当成一个整体进行匹配
echo preg_match('/[a-zA-Z0-9]/',$str,$arr1)?'非法<hr>':'合法<hr>';

//新需求:判断$str2中的.com后面如果紧跟的不是数字就echo "非法"
echo preg_match('/\.com[^\d]/',$str2,$arr1)?'非法<hr>':'合法<hr>';//[^\d]意思是"不是数字" \.com前的反斜杠起转义.的作用


?>






该贴已经同步到 抚菊深思的微博
附件: 你需要登录才可以下载或查看附件。没有帐号?加入Team
操千曲而后晓声,观千剑而后识器。
发表于 2013-5-19 10:57:54 | 显示全部楼层
补充
元字符及其在正则表达式上下文中的行为:
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
^ 匹配输入字符串的开始位置。(这个还有别的用途   取反的意思  )
$ 匹配输入字符串的结束位置。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。
{n} n 是一个非负整数,匹配确定的n 次。
{n,} n 是一个非负整数,至少匹配n 次。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。
已有 1 人评分威望 金币 贡献 收起 理由
店小二01 + 2 + 2 + 2 赞一个!

总评分: 威望 + 2  金币 + 2  贡献 + 2   查看全部评分

代码区

GMT+8, 2019-11-17 08:34

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部