正则表达式 php 模板,PHP正则表达式

正则表达式是一种强大的字符串处理工具,用于搜索、替换和分割字符串。在PHP中,常用的函数有preg_match、preg_match_all、preg_replace等。本文详细介绍了正则表达式的组成、量词、边界限制和模式选择符,并提供了手机号和邮箱的匹配示例。此外,还探讨了正则表达式在模板引擎实现中的作用,以及如何进行模板编译和替换。
摘要由CSDN通过智能技术生成

正则表达式是什么

是一种字符串处理的工具(搜索匹配、搜索替换、搜索分割)

功能强大,是一种规则

正则表达式应用范围

数据验证

数据处理/过滤

数据查询

各语言(js/php/java/c#)都支持

正则表达式PHP相关函数

preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) //正则表达式一个匹配,返回匹配结果的次数

preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) //执行一个全局正则表达式匹配,返回匹配结果的次数

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) //执行一个正则表达式的搜索和替换

preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) //执行一个正则表达式搜索并且使用一个回调进行替换

preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) //通过一个正则表达式分隔字符串

preg_quote ( string $str [, string $delimiter = NULL ] ) //转义正则表达式字符

preg_grep ( string $pattern , array $input [, int $flags = 0 ] ) //返回给定数组input中与模式pattern匹配的元素组成的数组.

正则表达式组成

定界符

一般使用'/',但不限于此

除字母、数字、反斜杠'\'的其他字符都可以作为定界符

原子

. 匹配除换行符之外任意字符

\d 匹配任意一个十进制数字

\D 匹配任意一个非十进制数字

\s 匹配一个不可见原子

\S 匹配一个可见原子

\w 匹配任意一个数字、字母或下划线[a-zA-Z0-9_]

\W 匹配任意非一个数字、字母或下划线[^a-zA-Z0-9_]

[] 作为一个原子,匹配[]之间的一个原子

[^] 作为一个原子,不能匹配[]之间的一个原子

元字符

//量词

{n} 匹配原子恰好出现n次

{n,} 匹配原子出现不少于n次

{n,m} 匹配原子出现至少n次,最多m次

* 相当于{0,}

+ 相当于{1,}

? 相当于{0,1}

//边界限制

^ 指定匹配的字符串以什么原子开头

$ 指定匹配的字符串以什么原子结尾

//模式选择符

| 多选一

//模式单元

() 多原子作为一个大原子

模式修正符

i //不区分大小写

s //正则表达式中.匹配所有字符,包括换行符

U //匹配模式变为懒惰模式(只有PHP有,其他语言不兼容,请使用.*?)

x //空白忽略

preg_filter与preg_replace区别

当匹配的目标数据是数组时,preg_filter只返回匹配的数组元素,preg_replace返回所有数组元素

正则表达式例子

非空判断

$pattern = '/\\S+/';

$ret = preg_match($pattern,' ');//false为空

去除空格

$str = '你是谁 2 年后';

$pattern = '/\\s+/';

$ret = preg_replace($pattern,'',$str);

手机号匹配

$pattern = '/^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\\d{8}$/';

//匹配移动

$pattern = '^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$';

//匹配联通

$pattern = '^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\\d{8}$';

//匹配电信

$pattern = '^1(3[3]|4[9]|53|7[037]|8[019])\\d{8}$';

email匹配

$pattern = '/^(\w)+(\.\w+)*@(\w)+(\.\w+)+$/';

URL验证(http/https)

$pattern = '/^https?\:(\w+\.)+[a-z]+$/';

正则表达式使用场景——模板引擎

实现原理

1、获取模板源文件

2、编译模板并输出到文件(用正则替换,文件讲保存编译后的模板代码html+php)

3、执行编译后的模板文件(将得到html,如果要做静态化就在此步)

4、输出模板

简单实现步骤

1、建立2个文件夹(一个存放模板源文件、一个存放模板编译文件)

2、读取模板源文件 $outputHtml = file_put_contents($filePath);

3、使用正则进行模式替换,然后用一个新文件存储起来

正则进行模式替换

$str = '测试:{{$test}}';

$pattern = '/\{\{ *\$(\w+) *\}\}/';

$arr = preg_replace($pattern,'<?php echo $\\1;?>',$str);

//最后$arr="测试:<?php echo $test;?>"

//除可以使用\\1,也可以使用$1

//得到字符串需要动态执行,可以使用eval(),否则不执行,但eval()不能有php开始/关闭标签

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值