您的位置:首页 > 编程语言 > PHP开发

PHP正则表达式基础和应用

2015-03-02 17:37 204 查看
常用元字符

元字符描述
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s
匹配任意空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
-表示范围
[]匹配括号中的任意一个字符
*、+、?量词
\W匹配任意不是字母、数字、下划线、汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
常用分组语法
类别代码/语法描述
捕获(exp)匹配exp,并捕获文本到自动命名的组里
(?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
注释(?#comment)​提供注释辅助阅读,不对正则表达式的处理产生任何影响
懒惰限定符
懒惰限定符代码/语法描述
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复
正则表达式的常用模式

忽略大小写模式(i):正则匹配将不区分待匹配内容的大小写

多行模式(m):多行匹配,^ 可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符\n之后的位置);$ 可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符\n之前的位置);
\r 匹配 [CR]、\n 匹配[LF] <—— CR为回车 LF为换行

字符串多个段落,比如

ab

cd

e

在windows操作系统中其实是:ab[CR][LF]cd[CR][LF]e

点号通配模式(s):使点号元字符可以匹配换行符

懒惰模式(U):懒惰匹配

结尾限制(D):如果使用$限制结尾字符,则不允许结尾有换行

支持UTF-8转义表达式(u):使用u修饰符,就可以使用UTF-8的转义表达,例"/^[\x{4e00}-\x{9fa5}]+$/u"

正则表达式的效率和优化
1)使用字符组代替分支条件
2)优先选择最左端的匹配结果
3)标准量词是匹配优先的
4)谨慎用点号元字符,尽可能不用星号和加号这样的任意量词
5)尽量使用字符串函数处理代替
6)合理使用括号
7)起始、行描点优化
8)量词等价转换的效率差异
9)对打而全的表达式进行拆分
10)使用正则以外的解决方案(PHP的字符串函数、PHP的Tokenizer系列函数、PHP的url函数及一些http函数、PHP的filer系列函数、JavaScript的DOM模型)

转义在数据安全中的应用
php中 htmlspecialchars() 函数 把代码中的特殊字符转为HTML实体
过滤所有HTML标签 <\/?[^>]+>
php中 strip_tags() 函数用于从字符串中去除HTML和PHP标记,仅保留参数中指定的标签
PHP中 addslashes() 函数返回一个字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线

URL重写两种实现方式
1.纯代码实现,通过解析 PATH_INFO 实现
2.服务器实现,如利用 Apache 的 mod_rewrite 模块实现
​Apache 开启 Rewrite 模块

​设置 AllowOverride All 的目的是让 .htaccess 文件生效

​新建一个 .htaccess 文件。 .htaccess 文件是 Apache 中重要的配置文件,其格式为纯文本

.htaccess 中的代码
1)打开运行时重写功能
RewriteEngine on
2)建立重写规则
RewriteRule index.html index.php
RewriteRule list-([A-Z]+)\.html $list.php?mode=$1 [NC]

URL重写给网站带来的好处
1)有利于搜索引擎的抓取
2)用户更容易记忆
3)影藏实现技术
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: