Perl兼容正则表达式函数-PHP8知识详解
在php8中有两类正则表达式函数,一类是perl兼容正则表达式函数,另一类是posix扩展正则表达式函数。二者区别不大,我们推荐使用Perl兼容正则表达式函数。

1、使用正则表达式对字符串进行匹配
用正则表达式对目标字符串进行匹配是正则表达式的主要功能。
完成这个操作需要用到preg_match()函数。这个函数是在目标字符串中寻找符号特定正则表达式规范的字符串的子串。
根据指定的模式来匹配文件名或字符串。它的语法格式如下:
preg_match(正则表达式,目标字符串,[数组])
其中,数组为可选参数,是用于储存匹配结果的数组。
利用preg_match()函数匹配字符串,示例代码:
<?php
$pattern = '/[0-9]{4}-[0-9]{2}-[0-9]{2}/'; // 匹配日期格式:YYYY-MM-DD
$string = 'Today is 2023-08-19.';if (preg_match($pattern, $string, $matches)) {echo "匹配成功!";print_r($matches);
} else {echo "未找到匹配项!";
}
?>
以上代码在PHP8中的运行结果为:
匹配成功!Array ( [0] => 2023-08-19 )
在上述示例中,我们定义了一个正则表达式模式 $pattern ,该模式用于匹配符合日期格式 YYYY-MM-DD 的字符串。然后,我们将要匹配的字符串存储在变量 $string 中。
接下来,我们使用 preg_match() 函数对 $string 进行匹配,并将匹配结果存储在变量 $matches 中。
如果匹配成功,则输出 "匹配成功!" 并打印出匹配的结果数组 $matches。否则,输出 "未找到匹配项!"。
注意:preg_match() 函数只会返回第一个匹配项并且仅返回一个布尔值(0 或 1),而不会返回所有匹配项。如果你需要获取所有匹配项,请使用 preg_match_all() 函数。
下面我们使用preg_match_all() 函数匹配字符串。
当使用 preg_match_all() 函数来匹配字符串时,您需要提供一个正则表达式作为模式,并指定要搜索的输入字符串。该函数将返回所有符合模式的匹配结果。
以下是示例代码:
<?php
$string = "Hello World, this is a test string.";
$pattern = "/[A-Za-z]+/";
$matches = [];
preg_match_all($pattern, $string, $matches);
print_r($matches[0]);
?>
在这个示例中,我们定义了一个输入字符串 $string 和一个正则表达式模式 $pattern。模式 /[A-Za-z]+/ 表示匹配一个或多个字母字符。
然后,我们创建了一个空数组 $matches 来存储匹配的结果。调用 preg_match_all() 函数,并传入模式、输入字符串以及结果数组。函数执行完后,所有符合模式的匹配项会被存储在 $matches 数组中。
最后,我们使用 print_r() 函数打印出匹配的结果,即 $matches[0],它包含了所有匹配到的字符串。
运行以上代码,输出结果如下:
Array ( [0] => Hello [1] => World [2] => this [3] => is [4] => a [5] => test [6] => string )
2、使用正则表达式替换字符串的字串
如果需要对字符串的子串进行替换,可以使用preg_replace()函数来完成。语法格式如下:
preg_replace(正则表达规范,预替换字符串的子串,目标字符串,[替换个税数])
当使用 preg_replace() 函数来替换字符串时,您需要提供一个正则表达式模式、要替换的新内容以及要搜索的输入字符串。该函数将在输入字符串中找到所有匹配模式的部分,并用新内容进行替换。
以下是示例代码:
<?php
$string = "Hello World! This is a test string.";
$pattern = "/test/";
$replacement = "sample";
$newString = preg_replace($pattern, $replacement, $string);
echo $newString;
?>
在这个示例中,我们定义了一个输入字符串 $string,一个正则表达式模式 $pattern(即 /test/),以及一个替换文本 $replacement(即 "sample")。
然后,我们调用 preg_replace() 函数并传入模式、替换文本和输入字符串。函数执行完后,它会在输入字符串中查找所有匹配模式 /test/ 的部分,并将其替换为 "sample"。
最后,使用 echo 语句输出替换后的字符串 $newString。
以上代码在PHP8中,运行结果为:
Hello World! This is a sample string.
请注意,preg_replace() 函数是通过正则表达式模式来匹配和替换字符串的。如果您想要替换一个具体的字符串而不是模式,请考虑使用 str_replace() 函数。
3、使用正则表达式切分字符串
使用正则表达式可以吧目标字符串,安照一定的正则规范切分成不同的子串。完成此操作需要用到strtok()函数。它的语法格式为:
strtok(正则表达式规范,目标字符串)
这个函数是指正则规范内出现的字符为准,把目标字符串切分成不同的子串,并且存入数组。
当然!strtok()函数用于将字符串分割成小块。下面是一个示例代码,展示了如何使用strtok()函数来切割字符串:
<?php
$string = "Hello,World!This,is,a,test";
$delimiter = ",!";
$token = strtok($string, $delimiter);
while ($token !== false) {echo $token . "<br>";$token = strtok($delimiter);
}
?>
在上述示例中,我们首先定义了要切割的字符串$string和切割字符串的分隔符$delimiter。然后,我们使用strtok()函数来获取第一个子字符串(即切片),并通过循环遍历所有的子字符串。每当调用strtok()函数时,它会返回下一个切片。
以上代码在PHP8中输出结果为:
Hello
World
This
is
a
test
到此为止,本文学习的是在PHP8中,Perl兼容正则表达式函数,主要讲到了使用正则表达式对字符串进行匹配、使用正则表达式替换字符串的字串和使用正则表达式切分字符串就讲解完了。
相关文章:
Perl兼容正则表达式函数-PHP8知识详解
在php8中有两类正则表达式函数,一类是perl兼容正则表达式函数,另一类是posix扩展正则表达式函数。二者区别不大,我们推荐使用Perl兼容正则表达式函数。 1、使用正则表达式对字符串进行匹配 用正则表达式对目标字符串进行匹配是正则表达式的主…...
Python处理空值NaN
fork_address_tempread_excel_column_to_list(./eqp_info.xls,Sheet1,车辆地址)for i in fork_address_temp:print(type(i))fork_address[0 if address nan else address for address in fork_address_temp]fork_address结果 <class float><class float><class…...
软件机器人助力交通运输局数据录入,实现高效管理
随着科技的迅速发展,许多传统的行业正在寻求通过科技创新优化工作流程、提升效率。在这样的大背景下,交通运输部门也开始注重引入科技手段改善工作流程。博为小帮软件机器人正逐步改变着交通运输局的工作方式。 软件机器人:交通管理的利器 博…...
时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化
时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SGMD分解算法(辛几何模态分解),分解结果可视…...
FinalShell报错:Swap file “.docker-compose.yml.swp“ already exists
FinalShell中编辑docker-compose.yml文件,保存时报错:Swap file ".docker-compose.yml.swp" already exists;报错信息截图如下: 问题原因:有人正在编辑docker-compose.yml文件或者上次编辑没有保存ÿ…...
卷积过程详细讲解
1:单通道卷积 以单通道卷积为例,输入为(1,5,5),分别表示1个通道,宽为5,高为5。假设卷积核大小为3x3,padding0,stride1。 卷积过程如下: 相应的卷积核不断…...
代码随想录第五十六天
代码随想录第五十六天 Leetcode 583. 两个字符串的删除操作Leetcode 72. 编辑距离 Leetcode 583. 两个字符串的删除操作 题目链接: 两个字符串的删除操作 自己的思路:想到了,但是初始化初始错了!!!! 思路1:直接动规五…...
.NET 最便捷的Log4Net日志记录器
最便捷的Log4Net使用方法 LOG4NET 配置日志记录器开始引用nuget LOG4NET 配置日志记录器 Apache log4net 库是一个帮助程序员将日志语句输出到各种的工具 的输出目标。log4net是优秀的Apachelog4j™框架的移植 Microsoft.NET 运行时。我们保持了与原始log4j相似的框架 同时利…...
深入探讨软件逆向工程:解密黑盒的奥秘
引言 逆向工程作为计算机科学领域中的一项关键技术,扮演着解密、漏洞分析、反病毒等诸多领域的重要角色。本文将深入探讨逆向工程的概念、应用领域以及一些常用的逆向工程技术。 什么是逆向工程? 逆向工程是指通过分析已有的程序或设备,推…...
利用tidevice+mysql+grafana实现ios性能测试
利用tidevicemysqlgrafana实现ios性能测试 1.什么是tidevice? tidevice是一个可以和ios设备进行通信的工具,提供以下功能: 截图获取手机信息ipa包的安装和卸载根据bundleID 启动和停止应用列出安装应用信息模拟Xcode运行XCTest,…...
内网安全:WMI协议与SMB协议横向移动
目录 网络拓扑图 网络环境说明 WMI协议 SMB协议 域内信息收集 WMI协议 - 横向移动 利用方式一:wmic命令 利用方式一:cscript 利用方式一:impacket SMB协议 - 横向移动 利用方式一:psexec 利用方式二:psexe…...
05-Numpy基础-用于数组的文件输入输出
np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的: 如果文件路径末尾没有扩展名.npy,则该扩展名会被自动加上。然后就可以通过np.load读取磁盘上的数组࿱…...
Docker微服务实战
文章目录 业务需求IDEA编写代码编写Dockerfile构建镜像运行容器网页端访问测试 业务需求 利用Docker部署应用服务,实现在网页端通过输入地址 ip:端口/hello/docker,页面显示hello docker ! IDEA编写代码 创建springboot项目 网上很多教程,此步骤省略……...
NLNet论文总结和代码实现
Non-local Neural Networks(非局部神经网络):使用自注意力机制捕获远程依赖。 论文: https://arxiv.org/pdf/1711.07971.pdf 源码: 长距离依赖关系,顾名思义,是要和远程建立关系,在l…...
数字 IC 设计职位经典笔/面试题(三)
共100道经典笔试、面试题目(文末可全领) 1. IC 设计中同步复位与异步复位的区别? 同步复位在时钟沿变化时,完成复位动作。异步复位不管时钟,只要复位信号满足条件,就完成复位动作。异步复位对复位信号要求…...
Matlab分割彩色图像
彩色图像 彩色图像除有亮度信息外,还包含有颜色信息。以最常见的RGB(红绿蓝)彩色空间为例来简要说明彩色图像: 彩色图像可按照颜色的数目来划分。例如,256色图像和真彩色图像(2的16次方=21677…...
[数据集][目标检测]垃圾目标检测数据集VOC格式14963张44类别
数据集格式:Pascal VOC格式(不包含分割的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):14963 标注数量(xml文件个数):14963 标注类别数:44 标注类别名称:["toiletries","plastic utensi…...
MATLAB算法实战应用案例精讲-【深度学习】推荐系统模型DSSMDeepFM
目录 前言 DSSM 输入层 英文 中文 表示层 匹配层 优缺点 DeepFM模...
基于springboot的社区生活缴费系统/基于javaweb的水电缴费系统
摘 要 网络的广泛应用给生活带来了十分的便利。所以把社区生活缴费管理与现在网络相结合,利用java语言建设社区生活缴费系统,实现社区生活缴费管理的信息化。则对于进一步提高社区生活缴费管理发展,丰富社区生活缴费管理经验能起到不少的促进…...
Linux —— keepalived
简介 Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载均衡和高可用性功能。 Keepalived 开源并且免费的软件。 Keepalived 的2大核心功能 1. loadbalance 负载均衡 LB:ipvs--》lvs软件…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
