正则在php中的使用
一、基础
a)常用元字符
代码 | 说明 |
. | 匹配除了换行符意外的任意字符 |
\w | 字母|数字|下划线|汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或者结束 |
^ | 匹配字符串的开始 |
$ |
匹配字符串的结束 |
b)常用限定符
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复一次或零次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
我们也可以轻松地指定一个字符范围,像[0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。
c)分支条件
正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。
0\d{2}-\d{8}|0\d{3}-\d{7}
d)子表达式
可以用小括号来指定子表达式(也叫做分组),子表达式的内容会被捕获,再次使用就方便了。
e)反义
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:
\W | 匹配不是数字字母下划线或汉字的字符 |
\S | 任意不是空白符的字符 |
\D | 任意非数字字符 |
\B | 不是以单词开头的位置 |
[^x] | 除了x意外的任意字符 |
[^aeiou] | aeiou以外的字符 |
f)反向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
g)贪婪与懒惰
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复1次或0次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
内容参考自:http://www.92csz.com/regex/
二、php中使用正则
a)匹配
$pattern = "/<div>.*div>/i"; $subject = "<div>abc</div><b>d</b><div></div>"; preg_match_all($pattern, $subject, $matchs); echo htmlentities($matchs[0][0]);
输出:<div>abc</div><b>d</b><div></div>(贪婪)
$pattern = "/<div>.*?div>/i"; preg_match_all($pattern, $subject, $matchs); echo '<br />'; echo htmlentities($matchs[0][0]);
输出:<div>abc</div>(懒惰)
b)替换
$string = 'The quick brown fox jumped over the lazy dog.'; echo $string . '<br>'; $patterns = array('/quick/', '/brown/', '/fox/'); $replacements = array('slow', 'black', 'bear'); echo preg_replace($patterns, $replacements, $string);
输出:
The quick brown fox jumped over the lazy dog.
The slow black bear jumped over the lazy dog.
$string = "hello 100"; $pattern = "/(\w+) (\d+)/i"; $replacement = "$1,$2"; echo preg_replace($pattern, $replacement, $string);
输出:hello,100
转载于:https://www.cnblogs.com/hwt987/p/3780098.html
正则在php中的使用相关推荐
- php文章远程图片,php保存远程图片到本地 php正则匹配文章中的远程图片地址
在添加文章的时候,很多情况下我们需要处理文章中的远程图片,将其保存到本地,以免别人网站删除后文章里面就无法访问了. 因此我们需要正则匹配文章中的图片地址, 这里我们使用php的正则表达式来实现:$co ...
- php 正则获取数字,php结合正则获取字符串中数字的几种方法
本篇文章主要介绍php结合正则获取字符串中数字的几种方法,感兴趣的朋友参考下,希望对大家有所帮助. php结合正则获取字符串中数字<?php $patterns = "/\d+/&qu ...
- php 正则获取某个div,php正则匹配html中带class的div并选取其中内容的方法
本文实例讲述了php正则匹配html中带class的div并选取其中内容的方法..具体分析如下: 先看一段html代码: 代码如下: 潮汐表数据仅供参考 潮时 (Hrs) 00:58 05:20 13 ...
- java利用正则截取字符串中的数字
java利用正则截取字符串中的数字 String str = "xxx第47297章33";String regex = "\\d*";Pattern p = ...
- 中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例
java正则匹配HTML中a标签里的中文字符示例 发布于 2020-8-12| 复制链接 摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符.分享给大家供大家参考,具体如下:今天群里一 ...
- 【去重】php正则过滤字符串中多次重复出现内容为1个
本篇文章主要讲解,使用用正则去重字符串中的多次出现的字符信息 作者:任聪聪 重复现象 以空格为例: 解决办法一.foreach+explode+implode进行替换 思路:利用foreach+exp ...
- php 正则替换url参数,JavaScript正则获取地址栏中参数的方法分享
这篇文章主要介绍了JavaScript正则获取地址栏中参数的方法,涉及javascript基于正则的字符串截取操作相关实现技巧,需要的朋友可以参考下 本文实例讲述了JavaScript正则获取地址栏中 ...
- 正则匹配文本中的括号
正则匹配文本中的括号 记录一下如何用正则匹配文本中的() [] {} ()的匹配 ()进行匹配时都前后都需要进行转义 String demo2 = "abcd394de (fsd) cost ...
- JS 使用正则匹配字符串中所有大括号包含的数据,转换成数组形式
JS 使用正则匹配字符串中所有大括号包含的数据,转换成数组形式 .match(/{[^}{]*?}/g)
- 用正则匹配字符串中连续的字符
用正则匹配字符串中连续的字符 1.通过利用正则来匹配字符串中有两个或两个以上的连续字符的子字符串 方法如下: <script>var reg =/(.)\1{1,}/g;//正则表达式va ...
最新文章
- 天天用事务,但是你知道MySQL事务的实现原理吗?
- 一周一论文(翻译)——[Acta 1996] The Log-Structured Merge-Tree (LSM-Tree)
- 6.7 程序示例--K-Means-机器学习笔记-斯坦福吴恩达教授
- C指针原理(24)-C指针基础
- 十九、PHP框架Laravel学习笔记——批量赋值和软删除
- arthas 排查内存溢出_Java 应用线上问题排查思路、常用工具小结
- .NET : 在单元测试中使用外部文件作为数据源
- 虎牙联合河北省反诈中心推出“青少年反诈教育公开课”
- 神经网络 权重文件 大小_神经网络中如何处理过拟合的问题
- jvm入门到详解-1
- Deep Convolutional Network Cascade for Facial Point Detection论文算法解析
- HTML5页面如何在手机端浏览器调用相机、相册功能
- 康耐视智能相机更新固件版本方式
- 笔记本电脑亮度调节键失灵了,该怎么解决?
- 这一年,你遇见了谁?
- 东芝笔记本出现w ndows,夏日白色清新范 13.3英寸东芝L830评测
- 【计算机二级Python】Python全部内置函数解析与使用
- 2021-04-23
- 云服务器密码忘了_云服务器 root 密码忘记了怎么办
- 高校的论文查重系统有哪些?
热门文章
- python函数(二)
- horizon client 无法识别域_LY-W100摄像头视频定时拍照图像识别分析抄表读表无线远传水表数_水表吧...
- git clone 所有远程分支
- LeetCode练习及自己理解记录(1)
- python科学计算笔记(十)pandas中时间、日期以及时间序列处理
- acrgis api for javaScript中的portal查询
- Cacheable注解使用详解
- Redis 新特性篇:100% 掌握多线程模型
- 剖析亿级请求下的多级缓存
- spring同类调用事务不生效-原因及三种解决方式