首页 后端开发 php教程 正则表达式入门

正则表达式入门

Nov 30, 2016 am 09:42 AM
入门 正则表达式

cjx最近在做爬虫的项目,急切需要在页面中抓取自己想要的内容,但是通过逻辑判断获取实在是过于复杂。很庆幸有正则表达式这个利器,很多事情都能够轻松办到,cjx之前也有了解一些关于正则表达式的知识。不过一直处于理解不彻底的状态,很难有效的自己编写一个满意的正则表达式出来。最近在网上发现有本Jeffrey E.F.Fried写的 精通正则表达式。 看了第一章后突然发现自己能写几个正则了,呵呵~~~ cjx突然有一种从屌丝升级成高富帅的感脚...下面对书上的第一章做了下总结~

行的起始和结束

或许最容易理解的元字符就是脱字符号^和美元符号$了,在检查一行文本时,^代表一行的开始,$代表结束。

读者最好养成按照字符来理解正则表达式的习惯。 例如,不要这样:

  ^cat 匹配以cat开头的行

而应该这样理解:

  ^cat 匹配的是以c作为一行的第一个字符,紧接一个a,紧接一个t的文本。

这两种理解的结果并无差异,但按照字符来解读更易于明白新遇到的正则表达式的内部逻辑。

 

匹配若干字符之一

如果我们需要搜索的是单词"grey",同时又不确定它是否写作"gray",就可以使用正则表达式结构体[...]。它容许使用者列出在某处期望的匹配的字符,通常被称作字符组。

所以,gr[ea]y的意思是:先找到g,跟着的是一个r,然后是一个a或者e,最后是一个y。

在字符组内部,字符租元字符 '-' 表示一个范围: 是完全一样的。我们还可以随心所欲地把字符范围与普通文本结合起来:

[0-9A-Z_!.?] 能够匹配一个数字、大写字母、下划线、惊态号、点号或者是问号。

 

排除型字符组

用[^...] 来取代 [...] 这个字符组就会匹配任何未列出的字符。例如:[^1-6] 匹配了除了1到6以外的任何字符。这个组中开头的^表示排除,所以这里列出的不是希望匹配的字符,而是不希望匹配的字符。

 

用点号匹配任意字符

元字符. 是用来匹配任意字符的字符组的简便写法。如果我们需要在表达式中使用一个"匹配任何字符" 的占位符,用点号就很方便。


匹配任意子表达式

元字符 | 是一个非常简洁的元字符,它的意思就"或" 。依靠它,我们能够把不同的子表达式组合一个总的表达式,而这个总的表达式又能够匹配任意的子表达式。

可选项元素

现在来看color和colour的匹配。它们的区别在于,后面的单词比前面的多一个u,我们可以用coloru?r 来解决这个问题。元字符? (也就是问号)代表可选项。把它加在一个字符的后面,就表示此处容许出现这个字符,不过它的出现并非匹配成功的必要条件。

其他量词:重复出现

+(加号)和*(星号)的作用与问号类似。元字符+ 表示之前紧邻的元素出现一次或多次,而* 表示之前紧邻的元素出现任意多次,或者不出现。
接下来看类似


这样的TAG,它表示一条高度为14的水平线。此外HR 与SIZE 之间必须有一个空格,而等号两边可以没有空格。于是若要找到网页中这样的HR,表达式既被写成
,有的时候HR的SIZE值往往是可变的,还有有可能不存在SIZE属性。那么表达式又可以被改写成。哇哦,真是太神奇了。

括号及反向引用

到目前为止,我们已经见过括号的两种用途:1.限制多选项的范围;2.将若干字符组合为一个单元,受问号或星号之类量词作用。现在我要介绍括号的另外一种用途即反向引用,虽然它在egrep中并不常见(不过流行的GNU版本确实支持这一功能),但在其他工具软件中很常见。
在支持反向引用的工具软件中,括号能够"记忆"其中的子表达式匹配的文本,不论这些文本是什么,元字符序列\1 都能够记住它们。

当然,在一个表达式中我们可以使用多个括号。再用\1、\2、\3等来表示第一、第二、第三组括号匹配的文本。括号是按照开括号'(' 从左到右的出现顺序来进行的,所以 ([a-z])([0-9])\1\2 中的\1代表[a-z] 匹配的内容,而\2 代表[0-9]匹配的内容。

神奇的转义
就是有的时候,我们可能需要匹配一些.+*?等符号,但是同时发现他们又是元符号。于是我们可以在它们的前面加上一个\ 转义符来实现这些特殊元符号的匹配。

一些有用的简记
\t    制表符
\n   换行符
\r    回车符
\s   任何空白字符,如空格、换行、tab缩进等所有的空白符
\S   除\s 之外的任何字符
\w  [a-zA-Z0-9] 在\w+ 中非常有用,可以用来匹配一个单词
\W  除\w 之外的任何字符 
\d   [0-9],即数字
\D   除\d 外的任何字符,即[^0-9]


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

值得你花时间看的扩散模型教程,来自普渡大学 值得你花时间看的扩散模型教程,来自普渡大学 Apr 07, 2024 am 09:01 AM

Diffusion不仅可以更好地模仿,而且可以进行「创作」。扩散模型(DiffusionModel)是一种图像生成模型。与此前AI领域大名鼎鼎的GAN、VAE等算法,扩散模型另辟蹊径,其主要思想是一种先对图像增加噪声,再逐步去噪的过程。其中如何去噪还原原图像是算法的核心部分。最终算法能够从一张随机的噪声图像中生成图像。近年来,生成式AI的惊人增长将文本转换为图像生成、视频生成等领域的许多令人兴奋的应用提供了支持。这些生成工具背后的基本原理是扩散的概念,这是一种特殊的采样机制,克服了以前的方法中被

一键生成PPT!Kimi :让「PPT民工」先浪起来 一键生成PPT!Kimi :让「PPT民工」先浪起来 Aug 01, 2024 pm 03:28 PM

Kimi:一句话,十几秒钟,一份PPT就新鲜出炉了。PPT这玩意儿,可太招人烦了!开个碰头会,要有PPT;写个周报,要做PPT;拉个投资,要展示PPT;就连控诉出轨,都得发个PPT。大学更像是学了个PPT专业,上课看PPT,下课做PPT。或许,37年前丹尼斯・奥斯汀发明PPT时也没想到,有一天PPT竟如此泛滥成灾。吗喽们做PPT的苦逼经历,说起来都是泪。「一份二十多页的PPT花了三个月,改了几十遍,看到PPT都想吐」;「最巅峰的时候,一天做了五个PPT,连呼吸都是PPT」;「临时开个会,都要做个

CVPR 2024全部奖项公布!近万人线下参会,谷歌华人研究员获最佳论文奖 CVPR 2024全部奖项公布!近万人线下参会,谷歌华人研究员获最佳论文奖 Jun 20, 2024 pm 05:43 PM

北京时间6月20日凌晨,在西雅图举办的国际计算机视觉顶会CVPR2024正式公布了最佳论文等奖项。今年共有10篇论文获奖,其中2篇最佳论文,2篇最佳学生论文,另外还有2篇最佳论文提名和4篇最佳学生论文提名。计算机视觉(CV)领域的顶级会议是CVPR,每年都会吸引大量研究机构和高校参会。据统计,今年共提交了11532份论文,2719篇被接收,录用率为23.6%。根据佐治亚理工学院对CVPR2024的数据统计分析,从研究主题来看,论文数量最多的是图像和视频合成与生成(Imageandvideosyn

从裸机到700亿参数大模型,这里有份教程,还有现成可用的脚本 从裸机到700亿参数大模型,这里有份教程,还有现成可用的脚本 Jul 24, 2024 pm 08:13 PM

我们知道LLM是在大规模计算机集群上使用海量数据训练得到的,本站曾介绍过不少用于辅助和改进LLM训练流程的方法和技术。而今天,我们要分享的是一篇深入技术底层的文章,介绍如何将一堆连操作系统也没有的「裸机」变成用于训练LLM的计算机集群。这篇文章来自于AI初创公司Imbue,该公司致力于通过理解机器的思维方式来实现通用智能。当然,将一堆连操作系统也没有的「裸机」变成用于训练LLM的计算机集群并不是一个轻松的过程,充满了探索和试错,但Imbue最终成功训练了一个700亿参数的LLM,并在此过程中积累

技术入门者必看:C语言和Python难易程度解析 技术入门者必看:C语言和Python难易程度解析 Mar 22, 2024 am 10:21 AM

标题:技术入门者必看:C语言和Python难易程度解析,需要具体代码示例在当今数字化时代,编程技术已成为一项越来越重要的能力。无论是想要从事软件开发、数据分析、人工智能等领域,还是仅仅出于兴趣学习编程,选择一门合适的编程语言是第一步。而在众多编程语言中,C语言和Python作为两种广泛应用的编程语言,各有其特点。本文将对C语言和Python的难易程度进行解析

AI在用 | AI制作独居女孩生活Vlog,3天狂揽上万点赞量 AI在用 | AI制作独居女孩生活Vlog,3天狂揽上万点赞量 Aug 07, 2024 pm 10:53 PM

机器之能报道编辑:杨文以大模型、AIGC为代表的人工智能浪潮已经在悄然改变着我们生活及工作方式,但绝大部分人依然不知道该如何使用。因此,我们推出了「AI在用」专栏,通过直观、有趣且简洁的人工智能使用案例,来具体介绍AI使用方法,并激发大家思考。我们也欢迎读者投稿亲自实践的创新型用例。视频链接:https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ最近,独居女孩的生活Vlog在小红书上走红。一个插画风格的动画,再配上几句治愈系文案,短短几天就能轻松狂揽上

PHP正则表达式验证:数字格式检测 PHP正则表达式验证:数字格式检测 Mar 21, 2024 am 09:45 AM

PHP正则表达式验证:数字格式检测在编写PHP程序时,经常需要对用户输入的数据进行验证,其中一个常见的验证是检查数据是否符合指定的数字格式。在PHP中,可以使用正则表达式来实现这种验证。本文将介绍如何使用PHP正则表达式来验证数字格式,并提供具体的代码示例。首先,让我们看一下常见的数字格式验证要求:整数:只包含数字0-9,可以以正负号开头,不包含小数点。浮点

细数RAG的12个痛点,英伟达高级架构师亲授解决方案 细数RAG的12个痛点,英伟达高级架构师亲授解决方案 Jul 11, 2024 pm 01:53 PM

检索增强式生成(RAG)是一种使用检索提升语言模型的技术。具体来说,就是在语言模型生成答案之前,先从广泛的文档数据库中检索相关信息,然后利用这些信息来引导生成过程。这种技术能极大提升内容的准确性和相关性,并能有效缓解幻觉问题,提高知识更新的速度,并增强内容生成的可追溯性。RAG无疑是最激动人心的人工智能研究领域之一。有关RAG的更多详情请参阅本站专栏文章《专补大模型短板的RAG有哪些新进展?这篇综述讲明白了》。但RAG也并非完美,用户在使用时也常会遭遇一些「痛点」。近日,英伟达生成式AI高级解决

See all articles