php正则表达式获取(捕获)组的笔记

简介: @(汗)的确,网络上存在很多这样的内容了,但今天我是来补充内容的,滑稽@(你懂的)众所周知 ,js中正则表达式()可以来获取匹配到内容,然后用$0 ...来显示

@(汗)的确,网络上存在很多这样的内容了,但今天我是来补充内容的,滑稽@(你懂的)

众所周知 ,js中正则表达式()可以来获取匹配到内容,然后用$0 ...来显示

嗯,都是正则,功能都是有的,但是直接的$0 是没有的 --
很明显,这种形式正好戳中php变量的命名要求- - $ + 变量命名要求(我觉得人人都知道,不打了不打了)

@(呵呵)

(pattern)

//这个例子直接复制网上的,这里注释说明
$regex = '/(ab(c)+)+d(e)?/';  
$str = 'abccde';
if(preg_match($regex, $str, $matches)){
   print_r($matches);
  }
//结果是
Array ( [0] => abccde [1] => abcc [2] => c [3] => e )


屏幕截图 2023-11-30 195917.png

屏幕截图 2023-11-30 195917.png

$pattern: 要搜索的模式,字符串形式。

$subject: 输入字符串。

屏幕截图 2023-11-30 200054.png

PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。

注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串

在目标字符串subject中的偏移量。

offset: 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。

$flags和offset不经常用到,我是不想看 --

因此,获取正则的组,用preg_match的第三个参数,就可以轻松获取,以数组形式,0是匹配到的内容,从1开始才是组

但是,有问题出来肯定是在写项目中发现,我需要的是替换 --

首先第一个思路,就是把preg_match 匹配到的内容拿来搞事情,但是这样无疑是增加无用代码的数量

因此,我讲矛头指向

preg_replace()

屏幕截图 2023-11-30 195845.png

$pattern: 要搜索的模式,可以是字符串或一个字符串数组。

$replacement: 用于替换的字符串或字符串数组。

$subject: 要搜索替换的目标字符串或字符串数组。

$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

$count: 可选,为替换执行的次数。

我们需要这么使用,

//复制菜鸟教程
$string = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = 'runoob ${2},$3';
echo preg_replace($pattern, $replacement, $string);

因为你想获取到组的内容,自然要在替换的地方使用组,2,3都行,这就跟js差不多了把 --

好了,今天就写到这了..

关于组的别名(?Ppattern),非捕获组(?:pattern),可以百度继续观看

[button href="https://www.cnblogs.com/DeanChopper/p/4685518.html"]比如推荐[/button]

\num

num是一个整数,是对捕获组的反向引用。 例如\2表示第二个子组匹配值,\1表示第一个子组匹配值

屏幕截图 2023-11-30 195804.png

这意思\2代表(\w)第二个的,形成这样对称的匹配

\k< name >

了解了(?Ppattern)与\num,这个就不难理解了。\k< name >是对命名捕获组的反向引用。其中 name 是捕获组名。

$regex='/(?P\w)abc\k/';

$str="fabcf";

于是这个就对应了f……f

另外,预查的四种形式是零宽度的,匹配的时候只做一个判断,本身是不占位置的。/HE(?=L)LLO/ 与HELLO匹配,而/HE(?=L)LO/与HELLO是不匹配的。毕竟但从字节数上两者就是不匹配的,前者只有4个,而后者有5个。

预查分为正向预查与反向预查。根据字面理解,正向预查是判断匹配字符串后面某些字符存在与否,而反向预查则是判断匹配字符串前面某些字符存在与否。

  正向预查判断存在使用(?=pattern),判断不存在使用(?!pattern)。

  反向预查判断存在使用(?<=pattern),判断不存在使用(?<!pattern)。

目录
相关文章
|
7月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
18天前
|
机器学习/深度学习 缓存 JavaScript
简单粗暴的正则表达式笔记
简单粗暴的正则表达式笔记
73 25
|
1月前
|
存储 PHP
在PHP中,正则表达式
在PHP中,正则表达式
29 5
|
1月前
|
SQL PHP 数据库
20 PHP如何捕获sql错误
路老师带你深入学习PHP,掌握技术干货。本文介绍了PDO中捕获SQL错误的三种模式:默认模式、警告模式和异常模式,以及如何使用errorCode()和errorInfo()方法进行错误处理。
51 5
|
2月前
|
PHP 数据库 开发者
PHP中的异常处理:捕获与处理错误
【10月更文挑战第20天】在代码的海洋中,异常就像是突如其来的风暴,可能会打翻我们的船只。了解如何在PHP中搭建一个坚固的避风港——使用异常处理机制来捕获和处理这些不期而至的错误,是每位船长(开发者)必须掌握的技能。本文将带你驶入这片海域,教你如何用PHP的异常处理机制来确保你的应用程序即使在遇到问题时也能优雅地航行。
|
3月前
|
机器学习/深度学习 缓存 JavaScript
简单粗暴的正则表达式笔记
简单粗暴的正则表达式笔记
45 5
|
6月前
|
自然语言处理 安全 PHP
PHP 之道笔记整理:最佳实践与安全指南
这篇文章讨论了PHP开发中的最佳实践,包括使用最新稳定版(PHP 8.3)以提升性能和安全,利用`DateTime`类及Carbon库处理日期时间,确保使用UTF-8编码并用`mb_*`函数处理字符串,以及通过密码哈希和数据过滤来加强Web应用安全。文章提醒开发者始终保持对新技术和安全实践的关注。
100 2
|
7月前
|
PHP 开发者
【PHP 开发专栏】PHP 字符串处理与正则表达式
【4月更文挑战第30天】本文探讨了PHP中的字符串处理和正则表达式应用。字符串处理部分涵盖基本操作(如连接、长度计算、截取)、格式化(printf/sprintf)、转换(数字与字符串间转换、大小写变换)、比较。正则表达式部分介绍了基本概念、语法(字符类、量词、边界符、分组)及其在搜索替换、数据验证和信息提取中的应用。了解并熟练运用这些技术对PHP开发者至关重要。
66 3
|
7月前
|
JSON JavaScript Java
【PHP】英文博客专栏PHP快速入门个人笔记
【PHP】英文博客专栏PHP快速入门个人笔记
142 1
|
7月前
|
机器学习/深度学习 Rust JavaScript
Rust 笔记:Rust 语言中应用正则表达式
Rust 笔记:Rust 语言中应用正则表达式
485 1