详解PHP正则表达式中的转义操作

PHP正则表达式中的特殊字符和转义

在 PHP 正则表达式中,有许多特殊字符具有特定的意义。这些特殊字符通常用于定义匹配模式的一部分,或者改变匹配的行为。以下是 PHP 正则表达式中一些常用的特殊字符及其含义:

.
    匹配除换行符之外的任何单个字符
^
    在方括号内表示取反(即不匹配括号内的字符),在行首表示锚定到行的开始位置
$
    锚定到行的结束位置
*
    匹配前面的子表达式零次或多次
+
    匹配前面的子表达式一次或多次
?
    匹配前面的子表达式零次或一次
[] 
    匹配方括号内的任何一个字符,方括号内的字符可以是单个字符或字符范围,如 [a-z]
|
    选择运算符,匹配竖线左右两边的任意一个子表达式
()
    用于分组,可以用来定义捕获组或非捕获组
\
    用于转义后面跟着的一个特殊字符使其被视为普通字符,或者用于引用一些特殊的预定义字符类或模式

当我们需要匹配这些特殊字符本身而不是它们的特殊含义时,就需要使用转义字符"\"(反斜线)

 

反斜线有多种用法.如果紧接着是一个非字母数字字符,表明取消该字符所代表的特殊涵义

比如,如果希望匹配一个"*"字符的字面意思,就需要在模式中写为 "\*",表示匹配的是*星号本身,而不是它的特殊含义,如果要匹配 \ 反斜线本身,也需要一个转义符转义 也就是"\\"

 

同时反斜线在 PHP 字符串 中也有特殊含义,因此也需要反斜线 \进行转义,最后要写成 "\\\\"

因为php会先对字符串进行转义,\\\\ 第一个转义符\转义第二个\  第三个转义符\转义第四个\

转义结果为\\   然后正则表达式继续转义,第一个转义符依然转义第二个\  最后匹配的就是反斜线\本身

 

PHP字符串中的特殊字符和转义

PHP 字符串中也有一些字符有特殊的含义,例如转义符 \   换行\n  回车\r  单双引号 等等

对于这些特殊字符,如果希望php字符串使用其本身的字面含义而不是特殊含义,同样需要转义符\去转义

<?php
echo '\\\\';
echo '<br>';
echo "\\";
echo '<br>';
echo "\n";
echo '<br>';
echo "\\n";
echo '<br>';
echo "\"\"";

可以看到,无论是在双引号还是单引号中,PHP都会对字符串进行解析,对字符串中的特殊字符执行转义操作

4bdd72d4634740779b3591a1bcdb06f2.png

因此,在php正则表达式中的字符串会经过两次解析,即

php解析正则时会先对字符串进行解析,然后再对正则表达式进行解析

下面就探究一下PHP字符串和正则表达式的转义操作具体是如何执行的

以下面的例子来说:

<?php
highlight_file(__FILE__);
echo '<br>';
$id=$_GET['id'];

if(preg_match("/hex|\-|\\|\*|\<|\>|\!|\+/",$id))
    echo "matched!";
else
    echo "pass!";

"hex"在php正则表达式和字符串都只是一个普通的字符串,没有特殊含义所以不需要转义

看起来代码中使用preg_match正则函数去检查正则表达式中是否包含 hex + -  * \  < > !  等关键词

但是其实并不完全是,这里不会匹配 \ 和 * 字符,取而代之匹配的是  |*   这个字符,其他的字符是正常匹配的

5bc70249c4db4a1899196b448cba1f9c.png

a0d2474b3f354884b1e635a4f11fa022.png

1ce0d5a4ecb14aa88edb804b0fd1f716.png

解释:

php解析正则时会先对字符串进行解析,然后再对正则表达式进行解析

正则匹配字符串 "/hex|\-|\\|\*|\<|\>|\!|\+/"    里面的  + - * < > ! 等字符在php字符串中没有特殊意义,就是普通字符,所以字符串解析完还是带有转义符号

反斜线\ 在PHP字符串中也是特殊字符,匹配字面意思时需要转义 所以\\被php字符串解析成\

如下图所示

<?php
echo "hex|\-|\\|\*|\<|\>|\!|\+";

5d3e14a604264d92927e7fc9bada59bd.png


php字符串解析完为     hex|\-|\|\*|\<|\>|\!|\+
接着就是正则表达式解析, 正则表达式中 - + * ! < >  |等都是特殊字符,所以需要转义符进行转义操作  

字符串中的 \|\* 被转义之后成为 |*      结果就变成了 hex| - | |* | < | > | ! | +   这个格式 

因此上面的结果中输入|* 会被匹配,而单独输入 | 和 * 都不会匹配

 

修改代码:

<?php
highlight_file(__FILE__);
echo '<br>';
$id=$_GET['id'];

if(preg_match("/hex|\-|\\\\|\*|\<|\>|\!|\+/",$id))
    echo "matched!";
else
    echo "pass!";

在正则表达式中用 \\\\ 来表示匹配一个字面意思的反斜线\      用\\\ 也可以表示,\\\\更规范

这样正则表达式就会正常匹配 \ 和 * 以及其他字符

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA如何在线安装一个插件,超简单

前言 我们在使用IDEA开发Java应用时&#xff0c;经常是需要安装插件的&#xff0c;这些各种各样的插件帮助我们快速的开发应用&#xff0c;今天&#xff0c;就来介绍下如何在IDEA中安装插件。 那么&#xff0c;我们该如何安装插件呢&#xff1f; 如何安装插件 首先&#xf…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f;下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

HarmonyOS开发 - 本地持久化之实现LocalStorage实例

用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。 说明&#x…

重学SpringBoot3-怎样优雅停机

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机&#xff1f;2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac…

【C++初阶】模版入门看这一篇就够了

文章目录 1. 泛型编程2. 函数模板2. 1 函数模板概念2. 2 函数模板格式2. 3 函数模板的原理2. 4 函数模板的实例化2. 5 模板参数的匹配原则2. 6 补充&#xff1a;使用调试功能观察函数调用 3. 类模板3 .1 类模板的定义格式3. 2 类模板的实例化 1. 泛型编程 在C语言中&#xff0…

numpy——数学运算

一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…

基于边缘计算的智能门禁系统架构设计分析

案例 阅读以下关于 Web 系统架构设计的叙述&#xff0c;回答问题1至问题3。 【说明】 某公司拟开发一套基于边缘计算的智能门禁系统&#xff0c;用于如园区、新零售、工业现场等存在来访被访业务的场景。来访者在来访前&#xff0c;可以通过线上提前预约的方式将自己的个人信息…

CAS的ABA问题

目录 什么是 CAS CAS最主要的用途&#xff0c;实现原子类 基于CAS实现自旋锁 CAS的一个典型缺陷&#xff0c;ABA问题 解决 ABA 问题的方法 什么是 CAS CAS: 全称Compare and swap&#xff0c;字⾯意思:”⽐较并交换“&#xff0c;⼀个 CAS 涉及到以下操作&#xff1a; 我…

基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的布匹缺陷检测系统&#xff0c;支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的布匹缺陷检测系统是在 PyTo…

基于SSM+小程序的童装商城管理系统(商城3)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的童装商城管理系统实现了管理员及用户。 1、管理员实现了 首页、个人中心、用户管理、分类列表管理、童装商城管理、系统管理、订单管理。 2、用户实现了 注册、登录、首…

一家光伏企业终止,恐不具行业代表性,市占率仅为2.35%

海达光能终止原因如下&#xff1a;报告期内海达光能销售金额较所在行业第二名亚玛顿相差两倍以上&#xff0c;公司毛利率更是远低于行业龙头福莱特&#xff0c;恐难以说明公司行业代表性。在企业竞争上&#xff0c;公司2021年度的市场占有率约为2.35%&#xff0c;公司未来光伏玻…

丁子晴作品《指尖的爱的温度》荣获“金犊奖”全球最佳新锐奖

第33届时报金犊奖颁奖盛典于10月18日在中国成都西部智谷数字体验中心隆重举行。丁子晴的作品《指尖的爱的温度》在激烈的竞争中脱颖而出,荣获了第33届“金犊奖”全球最佳新锐奖。享有盛誉的“金犊奖”是一个全球性的奖项,以其专业严谨、创意水平高的特点,被业界誉为“青年创意的…

kaggle 数据集下载

文章目录 kaggle 数据集下载&#xff08;1&#xff09; 数据集下载&#xff08;2&#xff09; 手机号验证 kaggle 数据集下载 这两天想学习 kaggle 赛事 把深度学习相关的内容自己给过一遍&#xff0c;快忘得差不多了&#xff0c;惭愧。 参考了好多帖子&#xff0c;使用命令行…

vue2项目在发布后更新,提示用户刷新页面

1、在项目根目录创建resetVersion.js的文件&#xff0c;内容如下 &#xff08;具体路径可能会有点问题&#xff0c;但是不影响&#xff09; const path require(path); const fsExtra require(fs-extra);const runBuild async () > {try {const OUTPUT_DIR public; // …

13.音乐管理系统(基于SpringBoot + Vue)

目录 1.系统的受众说明 ​​​​​​​ 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图&#xff08;图2.2.1-1&#xff09; 2.2.2 系统功能表&#xff08;表2.2.2…

MySQL用户权限管理属于SQL语句中的DCL语句

1.用户授权 语法&#xff1a;grant 权限&#xff0c;权限&#xff0c;on 库名&#xff0c;表名 to 用户名 [identified by 密码] MySQL5的版本&#xff0c;如果这个用户事先不存在&#xff0c;这个grant命令去给用户授权的时候&#xff0c;会将用户一起创建出来&#xff0…

时间序列预测(十五)——有关Python项目框架的实例分析

#1024程序员节&#xff5c;征文# 在之前的学习中&#xff0c;已经对时间序列预测的相关内容有了大致的了解。为了进一步加深理解&#xff0c;并能够将所学知识应用于实际中&#xff0c;我决定找一个完整的Python框架来进行深入学习。经过寻找&#xff0c;我终于找到了一篇非常具…

业务流程顺畅度为何受制于数据失真

在当今数字化驱动的商业环境中&#xff0c;企业的业务流程高度依赖于数据的准确性和完整性。然而&#xff0c;数据失真问题却如同隐匿在流程中的“暗礁”&#xff0c;频繁地给企业的业务流程顺畅度带来严重挑战&#xff0c;进而影响企业的整体运营效率和竞争力。 数据失真的表…

基于hive分析Flask为后端框架echarts为前端框架的招聘网站可视化大屏项目

基于hive分析Flask为后端框架echarts为前端框架的招聘网站可视化大屏项目 1. 项目概述 项目目标是构建一个大数据分析系统&#xff0c;包含以下核心模块&#xff1a; 1、数据爬取&#xff1a;通过request请求获取猎聘网的就业数据。 2、数据存储和分析&#xff1a;使用 Hive …

GB/T 28046.1-2011 道路车辆 电气及电子设备的环境条件和试验 第1部分:一般规定(2)

写在前面 本系列文章主要讲解道路车辆电气及电子设备的环境条件和试验GB/T 28046标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解GB/T 28046标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 第1部分&#xff1a;一般规定 7. 试验和要…