PHP正则表达式基础和应用

常用元字符

元字符

描述

. 匹配除换行符以外的任意字符
\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次以上,但尽可能少重复


正则表达式的常用模式

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

  2. 多行模式(m):多行匹配,^ 可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符\n之后的位置);$ 可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符\n之前的位置);

    \r 匹配 [CR]、\n 匹配[LF]   <——  CR为回车  LF为换行  
    字符串多个段落,比如
    ab
    cd
    e
    在windows操作系统中其实是:ab[CR][LF]cd[CR][LF]e

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

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

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

  6. 支持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)影藏实现技术


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值