谁高手指点,关于正则表达式的问题?
发布网友
发布时间:2022-04-23 05:31
我来回答
共2个回答
懂视网
时间:2022-04-23 09:52
这次给大家带来使用正则多行模式与单行模式的图文详解,使用正则多行模式与单行模式的注意事项有哪些,下面就是实战案例,一起来看一下。
在Expresso中,测试“多行模式”
测试一
注意:这里样例文本中3eeeee后面没有回车,光标就在e的后面。匹配的结果是3eeeee,如上图的Search Results区中所示。
为什么这里不能匹配1abcde和2abc?
开启多行模式
^ 可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符
之后的位置)
$ 可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符
之前的位置)
关闭多行模式
^ 只能匹配字符串开头
$ 只能匹配字符串结尾
知识点:
为回车符,
为换行符。在windows中,我们平常说的换行,实质上是先回车,后换行;下面有更详细解说。
如上图所示:
匹配 [CR]、
匹配[LF] <—— CR为回车 LF为换行
字符串多个段落,比如
ab
cd
e
在windows操作系统中其实是:ab[CR][LF]cd[CR][LF]e
在windows中,文本中的回车换行储存为: 0D 0A。也就是说,先储存的是“回车
”<CR>,再储存的是“换行
”<LF>
CR用符号'
'表示, ASCII代码是13, 十六进制为0x0D;
LF用符号'
'表示, ASCII代码是10, 十六进制为0x0A;
正则表达式:(?m)^(dw+)(s*)$
样例文本
匹配结果
在Expresso、PHP中,启用多行模式,"$" 匹配字符串结束位置或者 "
" 之前的位置。
单行模式
开启单行模式: . 可以匹配任意字符(包括换行符)
关闭单行模式: . 只有匹配 非换行 的其它任意字符(.可匹配
,即除了不匹配
外的所有字符。)
多行模式 影响 ^ 和 $ 的匹配
单行模式 影响 . 的匹配
多行模式中必定包含 ^ 或 $ 或同时包含,否则即使加了 m,也没有任何意义
单行模式和多行模式是八杆子打不着的两个概念,只是因为正则发展的历史原因,造就了这样两个MS互斥的概念
单行模式影响的是小数点“.”的匹配范围
多行模式影响的是“^”和“$”的匹配范围
至于后面几个概念,全局匹配,多行模式和贪婪模式之间也没有什么必然联系
全局匹配关闭,只匹配首次成功匹配项,全局匹配开启,匹配所有成功匹配项
全局模式是一些脚本语言中才有的概念
在进行匹配时,关闭全局模式,类似于.NET中的Match方法,开启全局模式,类似于.NET中的Matches方法
在进行替换时,关闭全局模式,类似于Java中的replaceFirst,开启全局模式,类似于Java中的replaceAll
(在进行匹配时,关闭全局模式,类似于PHP中的preg_ match函数;开启全局模式,类似于PHP中的preg_ match_ all函数)
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
基于PHP正则零宽断言的使用详解
正则表达式的模糊匹配功能如何实现
热心网友
时间:2022-04-23 07:00
高手实不敢当,对楼主疑问做简单说明
"/([\n\r]+)\t+/s":[\n\r],回车换行,[\n\r]+,回车换行出现1次及以上,([\n\r]+),捕获匹配的信息之后可以取出(表达式内部可以使用\?,?为一个数字,表示索引号,按顺序指定之前出现的捕获,比如此例中可以使用\1应用唯一的捕获),\t+横向制表符(就是键盘上的tab)出现1次或多次。最末的s表示按单行匹配字符串,单行的多行的区别是,"."在多行模式下不匹配回车换行,而在单行模式下则匹配。跟在最后的叫做modifier,相当于告知正则式引擎一些匹配参数
"/\<\!\-\-\{(.+?)\}\-\-\>/s":\转义字符(escaped sequence),就是说模式串中有些一些字符是对正则式引擎有意义的(比如\/[]+*等等),称为元字符(meta-character),如果你希望匹配元字符(比如我就想匹配+和*),则需要使用\作为前缀,告知正则式引擎,后续的字符不要解释他的意思,把它当作普通字符处理,比如想匹配“\”这个字符,可以写作“\\”,后面的\!\-\-\{表示把\都去掉的串,.+表示任意字符1次或多次,.+?表示非贪婪匹配,贪婪匹配就是尽可能多的匹配,非贪婪则相反表示尽可能少的匹配,详细用法不展开。
"/[\n\r\t]*\{ad\s+([a-zA-Z0-9_\[\]]+)\/(.+?)\}[\n\r\t]*/ie":和上面一致的东西不赘述,[a-z]表示接受字符集中从a到z的所有字符(无论ansi还是unicode字符集,a-z都是26个小写英文字母),[A-Z]和[0-9]同义,[a-zA-Z0-9_\[\]]整体表示大小写字母、数字、下划线、左右方括号。最后的ie,i表示忽略大小写,还真没见过e这种modifier
perl和javascript都支持将模式串(pattern)放在//之间。其他语言也许有支持的,本人不太清楚
正则表达式的问题?高手进
这个正则少点东西 应该能匹配到这里的.最好不要用.
请高手指点正则表达式:/^([A-Za-z0-9]{8,20})$/ 表达什么意思?
{8,20} 长度大于8小于20 )/ 匹配输入字符串的结束位置
正则表达式匹配问题?
这需要用正则表达式分两次替换,先把字母回车换行数字替换为字母空格数字,再把数字空格字母替换为数字回车换行字母,得到的结果就是整齐的文本了.
请问哪位高手精通正则表达式啊?我现在想要在js脚本端教验文本框只能输入...
正则可以是:^\d+,?\d+$使用方法:if(/^\d+(?:,\d+)?$/.test("文本框的值")){ alert("合法!")}else{ alert("不合法!");}如果不是的话,你可以在追问我。
正则表达式问题,高手速度来呀。。。
(A-Za-z]+)@是匹配字母至少一次后面加一个@符号 ((\w[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})分两部分 ((\w[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))和([a-zA-Z]{2,...
求正则表达式高手详细解答
\(?匹配一个(或没有 接着匹配几个空格 (\d{3})?是匹配一个3位数字,后面的?表示可以匹配一个或0个 \)?表示匹配一个)或没有 (?(1) [\-\s] )是一个分组,匹配一个?1开头,然后几个空格,后面可以跟一个-或空白 这个正则写的并不好 如果要匹配下面的电话号码,可以用(1-)?(\d{3...
关于PHP里中文正则表达式的问题
解释:[a-zA-Z_\x{4e00}-\x{9fa5}] //第一位,必须非数字,但又要满足其它条件 [\x{4e00}-\x{9fa5}\w]{2,11} //从第二位开始,必须满足全部条件,长度为2到11位(加第一位就是3到12位啦)。补充:\x{4e00}-\x{9fa5}这个就是汉字的Unicode范围。一定不要忘记最后那个 u ,没有...
正则表达式获得子匹配的问题 正则表达式高手 请进
首先用表达式 a寻找文本,得到a,表达式a报告成功,控制权将于表达式b;然后用b去寻找文本,得到b,控制权交于*;接着*告诉b需要尽可能多的匹配b,但是匹配不到也没有关系,于是b接着寻找,直至a处,这就找到了bbb,是吧,于是(b*)表达式报告成功。然后是表达式(a(b*))报告成功,对吧,而表达式...
正则表达式问题
)00)-02-29)考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。^(?:(?!0000)[0-9]-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02]...
关于正则表达式中的(?:)问题
()的意思有两个,一个有的书上叫记忆,就是把匹配的字符保存在寄存器里,以备后用,另一个意思是分组,所以()又叫记忆分组。而(?:)只有分组的功能,分组的意思是把组内的部分看成是同一个对象对待,比如一个字符串,经常用来分割并列逻辑(就是'|')。所以分组符号只是不把匹配内容放到寄存器里,...