本篇文章讲述了JavaScript的正则表达式的基础,大家对于JavaScript正则表达式不熟悉的正好可以来学习学习,讲的都是JavaScript比较基础的正则表达式,不熟悉的同学我们一起来看看吧!
正则表达式学习(持续更新)
今天在学javascript的时候学到了RegExp对象,借机学习一下正则表达式,以前没接触过,趁机学习一波,很舒服。
参考网站:正则表达式30分钟入门教程点击打开链接
1.什么是正则表达式
正则表达式是用来表述字符串匹配的规则。
2.正则表达式的相关概念
2.1元字符
元字符是正则表达式中自己规定的一种特殊符号,在正则表达式中加入用以代替某些规则。
\b | 表示单词的开始或结束 |
. | 表示除换行以外的任意字符 |
* | 表示*前面出现的任意个数的该字符,例如a*,表示前面有任意个数的a(重复0次或多次) |
+ | 表示+前面出现的任意个数的该字符,例如a+,表示前面有任意个数的a(重复1次或多次) |
? | 重复0或1次 |
{n} | 重复n次 |
{n, } | 重复大于等于n次 |
{n, m} | 重复n到m次 |
\d | 表示一个0-9的数字 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符,包括空格、制表符、换行符、中文全角空格等 |
^ | 匹配字符串的开始 |
& | 匹配字符串的结束 |
3.简单的正则表达式
直接从例子走起:
例1:当我想去匹配单词hello时,所写的正则表达式(匹配规则)为:hello
这样会匹配到所有含有hello的单词,如:helloworld也被匹配了进来,但如果只想匹配hello,则需要使用元字符\b,将hello前后断开,形成单独的单词hello,则正则表达式应该为:\bhello\b
例2:当要找的hello后面任意字符处跟着一个world,则应当使用元字符.和*,正则表达式为\bhello\b.*\world\b
例3:当想去匹配021-xxxxxxx类似这样的电话号码时,应当使用021-\d\d\d\d\d\d\d,这其中“021-”为简单的字符,不代表任何特殊含义,而后面使用的\d为元字符。这个正则表达式可简写为021-\d{7},代表\d重复了7次。
例4:匹配1个或多个连续数字,\d+
例5:匹配以a开头的单词,\ba\w*\b
例6:匹配5-12位的QQ号,^\d{5, 12}&
4.字符转义
如果想要查找的字符串里面有元字符,需要在元字符前面加上\来将元字符转为普通的字符。
5.字符类
这部分解决的问题是如果想要匹配的字符没有相应的元字符对应怎么办,那么我们需要手动创建一个字符类。
例如如果数字0-9没有\d与之匹配,那么当我们想要查找0-9的任意数字时,可以创建一个[0-9]的字符类,它的作用与\d完全相同。
例如正则表达式 \(?0\d{2}[), -]?\d{8}可以用来匹配电话号码,依次解释一下\(代表对(进行转义,?表示其重复0或1次,\d表示两个数字,[), -]表示)和-的字符类,?表示其重复0或1次,后接着有8个数字。
6.分枝条件
上面写的 \(?0\d{2}[), -]?\d{8}这样的正则表达式可能会匹配到(01012345678或(010-12345678等不正确的字符串,对于这样的情况可以使用分枝条件,分枝条件与js中的逻辑或||类似,并且都是短路操作符,从左到右匹配到一个条件能判断时就结束。
对于上面的情况可以写为 \(0\d{2}\)\d{8}|0\d{2}-\d{8}|\(0\d{2}\)\d{8}
7.分组
该部分为了解决重复的不是单个字符,而是多个字符的问题。重复单个字符时我们可以使用字符+元字符里面的限定符这样的写法,但当重复字符为多个时,可以在重复字符外加上()。例如下面的正则表达式可用来表示ip地址。
(2[0-4]\d|25[0-5]|[01]\d\d?\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
8.反义
当需要查找不属于某个能够简单定义的字符时,例如除了xxx以外的字符时,需要用到反义
\W | 匹配任意不是字母、数字、下划线、汉字的字符 |
\D | 匹配任意不是数字的字符 |
\B | 匹配任意不是单词开头或结束位置的字符 |
\S | 匹配任意不是空白的字符 |
[^x] | 匹配除了x以外的字符 |
[^aeiou] | 匹配除了aeiou之外的字符 |
例如正则表达式^\S+&用来匹配一段不含空白符的字符串
9.后向引用
这部分的内容跟前面的分组是匹配的,当我们使用()为字符分组后,这个分组我们可以通过编号的方式在后面继续引用,对于通过()进行的分组,按照( 出现的顺序从1开始进行分组,例如正则表达式\b(\w+)\s+\1\b,可以用来匹配重复出现的单词,例如go go等,这里就是通过\1引用了之前出现的分组。
其他涉及到的后向引用语法有:
(exp) | 匹配exp,并捕获当前内容到自动的分组里 |
(? |
匹配exp,并捕获当前内容并分配组名为name |
(?:exp) | 匹配exp,不为捕获的内容分配组名 |
10.零宽断言
用于查找在某部分内容之前或之后但不包括该内容的部分。
正则表达式(?=exp)的意思就是断言后面出现的部分可以匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分。比如查找I'm dancing and singing时会匹配dance和sing(由于有\w+不会匹配为s)。
正则表达式(?<=exp)的意思是断言前面的部分可以匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re为开头的单词的后半部分,例如查找reading时会匹配到ading。
假如你想给一个很长的数字每三位加一个逗号,例如对123456789加逗号,可以使用正则表达式((?<=\d)\d{3})+\b,查找结果为234567890(这部分查找规则没看懂。。。)
下面的例子同时使用两种断言(?=<\s)\d+(?=\s),用来匹配两个空白字符之间的数字,不包括空白字符。
总的来看,零宽断言的目的就是为了按照一定的规则确定匹配字符的起始点或终止点。
11.负向零宽断言
前面提到了使用反义来查找不是某个字符或不在某个字符里。
例如如果想查找一个单词出现了字母q而后面跟的不是u。可能会写\bq[^u]\w*\b。但对于这样的表达式,当q出现在单词结尾时就会出现错误,因为[^u]会将单词的间隔符匹配掉,这样会进而匹配下一个单词,它会匹配到Iraq fighting这样的字符串。
为了解决反义的占用问题,我们可以使用负向零宽断言,因为它只匹配一个位置,不会消耗掉任何字符。上面表达式的可以写为\bq(?!u)\w*\b。
同理,我们用(?
一个更复杂的例子:(?<=<(\w+)>).*(?=<\/\1>)
看到前面的(?<=)和后面的(?=),则知道前后都为零宽断言,而<(\w+)>则代表html标记,如果前面的为
12.注释
通过语法(?#comment)来包含注释,例如2[0-4]\d(?#200-249)。
13.贪婪与懒惰
在处理字符串匹配问题时,通常的行为是匹配尽可能多的字符。以表达式a.*b和字符串aabab为例,会匹配aabab,而不是匹配ab,这样的匹配规则称为贪婪匹配。
而有时,我们需要匹配尽可能少字符的懒惰匹配,这时,需要在上面所说的限定符后面加上?,如a.*?b就将贪婪匹配转化为懒惰匹配,此时会匹配到aab(1-3的字符)和ab(4-5的字符)(具体原因涉及到正则表达式的匹配规则)。
14.处理选项
类似于js里面的flag,有不区别大小写、多行模式、全局模式等。
15.平衡组/递归匹配
这部分为了处理匹配问题,例如想匹配数学表达式中(5*3)))中的(5*3),不能简单的写为\(.*\),这样会匹配到整个表达式。那么应当采取的匹配策略类似于学到过的括号匹配问题,用栈来解决,遇到(压栈,遇到)弹栈,如果最后栈为空,这说明表达式里面的括号完全匹配,如果不为空,正则表达式引擎会回溯来使得括号匹配。
相关推荐:
以上是学习正则表达式基础的详细内容。更多信息请关注PHP中文网其他相关文章!

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInacookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionwwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍历会话数据可以通过以下步骤实现:1.使用session_start()启动会话。2.通过foreach循环遍历$_SESSION数组中的所有键值对。3.处理复杂数据结构时,使用is_array()或is_object()函数,并用print_r()输出详细信息。4.优化遍历时,可采用分页处理,避免一次性处理大量数据。这将帮助你在实际项目中更有效地管理和使用PHP会话数据。

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具