正则表达式在PHP8中的应用案例-PHP8知识详解

正则表达式在php8中有许多应用案例。以下是一些常见的应用场景:如数据验证、数据提取、数据替换、url路由、文本搜索和过滤等。

Image

1、数据验证

使用正则表达式可以对用户输入的数据进行验证,例如验证邮箱地址、手机号码、密码强度等。

下面是一个用正则表达式验证邮箱地址的示例代码:

$email = "example@example.com";
$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';

if (preg_match($pattern, $email)) {
    echo "邮箱地址有效";
} else {
    echo "无效的邮箱地址";
}

在这个示例中,我们使用 preg_match() 函数来进行邮箱地址的验证。$pattern 变量存储了表示邮箱地址格式的正则表达式。如果 $email 符合给定的模式,则打印出"邮箱地址有效";否则,打印出"无效的邮箱地址"。

请注意,此处提供的正则表达式只是基本的示范,可以根据需求和具体情况进行调整。不同的业务场景可能需要更复杂或严格的正则表达式来进行数据验证。

2、数据提取

正则表达式可以用来从字符串中提取特定的数据,例如提取URL中的域名、提取html标签中的内容等。

<?php

// 从URL中提取域名
$url = 'https://www.example.com/some-page';
preg_match('/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/i', $url, $matches);
$domain = $matches[1];
echo "域名: " . $domain . "<br>";

// 从HTML标签中提取内容(假设为<a>标签)
$html = '<a href="https://www.example.com">Example</a>';
preg_match('/<a(?: [^>]+)?>((?:.|\s)*?)<\/a>/', $html, $matches);
$content = $matches[1];
echo "内容: " . $content;

?>

上面代码在PHP8中运行的结果为:

域名: example.com
内容: Example

在上面的代码中,我们首先通过正则表达式从 URL 中提取了域名。该正则表达式匹配以 http:// 或 https:// 开头(可选),然后以 www. 开头的部分(也可选),最后是第一个 / 前的所有字符。

接下来,我们通过正则表达式从 HTML 标签 <a> 中提取了内容。这个正则表达式匹配了 <a> 标签之间包含的所有文本,并保存到 $matches 数组的第一个元素中。

请注意,这只是一个简单的示例,实际应用中可能需要更复杂的正则表达式和逻辑来处理不同的情况。

3、数据替换

使用正则表达式可以对字符串中的特定模式进行替换,例如将字符串中的所有空格替换为下划线、将特定格式的日期替换为其他格式等。

以下是 PHP8 中使用正则表达式进行数据替换的示例代码:

<?php

// 将字符串中的所有空格替换为下划线
$string = 'This is a string with spaces.';
$pattern = '/\s+/';
$replacement = '_';
$result = preg_replace($pattern, $replacement, $string);
echo "Updated string: " . $result . "<br>";

// 将特定格式的日期替换为其他格式(假设将 yyyy-mm-dd 格式替换为 mm/dd/yyyy)
$date = '2023-08-20';
$pattern = '/(\d{4})-(\d{2})-(\d{2})/';
$replacement = '$2/$3/$1';
$result = preg_replace($pattern, $replacement, $date);
echo "Updated date: " . $result;

?>

上面代码在PHP8中的运行结果为:

Updated string: This_is_a_string_with_spaces.
Updated date: 08/20/2023

在上面的代码中,我们首先使用正则表达式 \s+ 匹配所有的空格。然后,在 preg_replace() 函数中指定了用下划线 $replacement 替换匹配到的空格。

接着,我们使用正则表达式 (\d{4})-(\d{2})-(\d{2}) 匹配形如 yyyy-mm-dd 的日期格式。然后,通过在 $replacement 中使用 $1、$2 和 $3 分别表示匹配到的年、月和日,并按照 mm/dd/yyyy 格式进行替换。

请注意,以上只是简单的示例,实际应用中可能需要更复杂的正则表达式和逻辑来处理不同的替换要求。

4、URL路由

在PHP8中,可以使用正则表达式来定义URL路由规则,实现灵活的URL匹配和路由转发。

以下是一个示例代码,演示如何将URL匹配和路由转发结合起来:

// 定义URL路由规则
$routes = [
    '/users/(\d+)' => 'UserController@show', // 匹配 /users/123,调用 `UserController` 的 `show` 方法
    '/posts'       => 'PostController@index', // 匹配 /posts,调用 `PostController` 的 `index` 方法
    '/login'       => 'AuthController@login', // 匹配 /login,调用 `AuthController` 的 `login` 方法
];

// 获取当前请求的URL
$url = $_SERVER['REQUEST_URI'];

// 循环遍历所有路由规则
foreach ($routes as $pattern => $controllerAction) {
    // 将URL模式转换为正则表达式
    $regex = '#^' . $pattern . '$#';

    // 进行正则表达式匹配
    if (preg_match($regex, $url, $matches)) {
        // 提取捕获组的值
        $params = array_slice($matches, 1);

        // 根据控制器和方法名进行路由转发
        list($controller, $action) = explode('@', $controllerAction);
        $controllerObj = new $controller();
        $controllerObj->$action(...$params);

        // 停止继续匹配其他路由规则
        break;
    }
}

上述示例代码中,我们首先定义了一组URL路由规则,每个规则使用正则表达式来匹配URL。当有请求到来时,代码会循环遍历所有的路由规则,并使用正则表达式进行匹配。如果匹配成功,则根据定义好的控制器和方法名进行路由转发,并将捕获到的参数传递给相应的方法。

请注意,上述示例代码只是一个简单的示例,实际的URL路由系统可能会更复杂和完善。此示例仅用于演示如何使用正则表达式来实现基本的URL匹配和路由转发功能。

5、文本搜索和过滤

正则表达式可以用来进行文本搜索和过滤,例如在大量文本中查找特定模式的字符串、过滤敏感词汇等。

我可以为您提供一个在 PHP8 中使用正则表达式实现 URL 路由规则的示例代码。假设您希望匹配以 /user/ 开头并且后面跟着用户名的 URL。

$url = '/user/johndoe';

// 使用 preg_match 函数进行正则表达式匹配
if (preg_match('#^/user/([a-zA-Z0-9_-]+)$#', $url, $matches)) {
    $username = $matches[1];
    echo "匹配到用户名:$username";
} else {
    echo "URL 不匹配指定的模式";
}

这段代码中,我们使用 preg_match() 函数进行正则表达式匹配。正则表达式模式 #^/user/([a-zA-Z0-9_-]+)$# 匹配以 /user/ 开头,并且后面跟着至少一个字母、数字、下划线或破折号的字符串(即用户名)。如果 URL 符合指定的模式,将会从 $matches 数组中获取到用户名,并输出相应信息。

请注意,这只是一个简单的示例代码,您可以根据具体需求修改正则表达式模式来适应不同的路由规则。

这些只是正则表达式在PHP8中的一些应用案例,实际上正则表达式在编程中有非常广泛的应用。

 

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

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

相关文章

Source Insight配置Cppcheck做静态测试(Windows)

1.安装cppcheck 先从cppcheck官方网站下载cppcheck的安装包。 注&#xff1a; &#xff08;1&#xff09;官网地址&#xff1a;https://sourceforge.net/projects/cppcheck &#xff08;2&#xff09;截止2023年8月&#xff0c;官方发布的最新版本是cppcheck-2.11-x64-Setup.…

第8步---MySQL的存储过程和触发器

第8步---MySQL的存储过程和触发器 1.存储过程 5开始支持的 sql集&#xff0c;类似Java中的代码中的方法 实现对sql的封装和服用 有输入和输出 可以声明变量 可以实现一下复杂的控制语句 1.1入门案例 基本语法 测试数据 -- 创建表的测试数据 create table dept(deptno int pri…

什么是合成数据(Synthetic Data)?

关于合成数据您需要知道的一切 推出人工智能&#xff08;AI&#xff09;的企业在为其模型采集足够的数据方面会遇到一个主要障碍。对于许多用例来说&#xff0c;正确的数据根本不可用&#xff0c;或者获取数据非常困难且成本高昂。在创建AI模型时&#xff0c;数据缺失或不完整…

葡萄目标检测(yolov8模型,无需修改路径,python代码,解压缩后直接运行)

运行效果视频&#xff1a;葡萄目标检测&#xff08;yolov8模型&#xff0c;无需修改路径&#xff0c;python代码&#xff0c;解压缩后直接运行&#xff09;_哔哩哔哩_bilibili 1.采用yolov8模型 models文件夹保存的是yolov8的训练好的模型参数 PinotNoir文件夹存放的是训练集 …

Flink学习笔记(一)

流处理 批处理应用于有界数据流的处理&#xff0c;流处理则应用于无界数据流的处理。 有界数据流&#xff1a;输入数据有明确的开始和结束。 无界数据流&#xff1a;输入数据没有明确的开始和结束&#xff0c;或者说数据是无限的&#xff0c;数据通常会随着时间变化而更新。 在…

透过源码理解Flutter中widget、state和element的关系

1、framework源码组成 Flutter中widget、state、element的源码位于framework.dart中&#xff0c;整个文件6693行(版本Flutter 3.12.0-14.0.pre.28)。整个代码可划分为若干部分&#xff0c;主要包括key、widget、state、element四部分。 1.1 key 关于key的代码65行到272行&am…

8.3.tensorRT高级(3)封装系列-tensor封装,索引计算,内存标记及自动复制

目录 前言1. Tensor封装总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-tensor封装&#xff0c;索引计算&a…

【Spring系列篇--关于IOC的详解】

目录 面试经典题目&#xff1a; 1. 什么是spring&#xff1f;你对Spring的理解&#xff1f;简单来说&#xff0c;Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 2.什么是IoC&#xff1f;你对IoC的理解&#xff1f;IoC的重要性?将实例化对象的权利从程序员…

echart 3d立体颜色渐变柱状图

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 根据业务需求将不同的法律法规&#xff0c;展示不同的3d立体渐变柱状图。 2.先看下效果图 3. 确定三面的颜色&#xff0c;这里我是自定义的颜色 // 右面生成颜色const rightColorArr ref(["#79D…

自动驾驶仿真:基于Carsim开发的加速度请求模型

文章目录 前言一、加速度输出变量问题澄清二、配置Carsim动力学模型三、配置Carsim驾驶员模型四、添加VS Command代码五、Run Control联合仿真六、加速度模型效果验证 前言 1、自动驾驶行业中&#xff0c;算法端对于纵向控制的功能预留接口基本都是加速度&#xff0c;我们需要…

git环境超详细配置说明

一&#xff0c;简介 在git工具安装完成之后&#xff0c;需要设置一下常用的配置&#xff0c;如邮箱&#xff0c;缩写&#xff0c;以及git commit模板等等。本文就来详细介绍些各个配置如何操作&#xff0c;供参考。 二&#xff0c;配置步骤 2.1 查看当前git的配置 git conf…

解决ios隔空播放音频到macos没有声音的问题

解决ios隔空播放音频到macos没有声音的问题 一、检查隔空播放支持设备和系统要求二、打开隔空播放接收器三、重置MAC控制中心进程END 一、检查隔空播放支持设备和系统要求 Mac、iPhone、iPad 和 Apple Watch 上“连续互通”的系统要求 二、打开隔空播放接收器 ps;我设备是同一…

基于web的停车场收费管理系统/基于springboot的停车场管理系统

摘 要 随着汽车工业的迅猛发展&#xff0c;我国汽车拥有量急剧增加。停车场作为交通设施的组成部分,随着交通运输的繁忙和不断发展&#xff0c;人们对其管理的要求也不断提高&#xff0c;都希望管理能够达到方便、快捷以及安全的效果。停车场的规模各不相同,对其进行管理的模…

剪枝基础与实战(3): 模型剪枝和稀疏化训练流程

Model Pruning 相关论文:Learning Efficient Convolutional Networks through Network Slimming (ICCV 2017) 考虑一个问题,深度学习模型里面的卷积层出来之后的特征有非常多,这里面会不会存在一些没有价值的特征及其相关的连接?又如何去判断一个特征及其连接是否有价值? …

redis实战-缓存数据解决缓存与数据库数据一致性

缓存的定义 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪&#xff0c;这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存…

【汇编语言】使用DS和[address]实现字的传送

文章目录 要解决的问题&#xff1a;CPU从内存单元中读取数据字的传送 要解决的问题&#xff1a;CPU从内存单元中读取数据 1、要求&#xff1a;CPU要读取一个内存单元时&#xff0c;必须先给出这个内存单元的地址&#xff1b; 2、原理&#xff1a;8086设备中&#xff0c;内存地…

LeetCode--HOT100题(35)

目录 题目描述&#xff1a;23. 合并 K 个升序链表&#xff08;困难&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;23. 合并 K 个升序链表&#xff08;困难&#xff09; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合…

git压缩/合并多次commit提交为1次commit提交

git压缩/合并N次commit提交为1次commit提交 假设有最近3次提交&#xff1a; commit_id1 commit_id2 commit_id3目标是把以上3次commit合并成1个commit&#xff0c;注意&#xff0c;最新的commit提交在最上面。 在git bash里面的操作步骤&#xff1a; &#xff08;1&#xff0…

【周末闲谈】关于“数据库”你又知道多少?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 系列目录前言数据库数据库的五大特点数据库介绍数据库管理系统&a…

Oracle故障案例之-19C时区补丁DSTV38更新

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…