正则表达式 (.*) .* 就是这2种写法,有什么却别?分别代表什么含义?

作者&投稿:叔养 (若有异议请与网页底部的电邮联系)
正则表达式这两种写法有什么区别?~

\b(?<=abc)\w+\b 这个正则不可能成立, (?<=abc) 表示\w+前面要是abc,但abc不包括在正则匹配的内容中,\b表示单词边界,这个正则中\b是在\w+前面,\w+前面是abc,\b不可能成立,因此\b(?<=abc)\w+不能匹配任何字符串
(?<=\babc)\w+\b 这里\b是在abc前面的,因此可以匹配以abc开头的单词除abc外剩余的部分
如 abcxyz1 将匹配 "xyz1"


把正则表达式的一部分放在圆括号内,你可以将它们形成“组”,表达式的处理引擎会把括号内的处理结果记下来,并给他编号(分别为\1,\2...)。然后你可以对这个结果(即“组”)使用一些正则操作,例如重复操作符。

事实上,当用“()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。当对被匹配的组进行向后引用的时候,可以用“\数字”的方式进行引用。<<\1>>引用第一个匹配的后向引用组,<<\2>>引用第二个组,以此类推,<<\n>>引用第n个组。而<<\0>>则引用整个被匹配的正则表达式本身。
可能有点抽象,我们看一个例子。

假设你想匹配一个HTML标签的开始标签和结束标签,以及标签中间的文本。比如<B>This is a test</B>,我们要匹配<B>和</B>以及中间的文字。我们可以用如下正则表达式:“<([A-Z][A-Z0-9]*)[^>]*>.*?</\1>”

首先,“<”将会匹配“<B>”的第一个字符“<”。然后[A-Z]匹配B,[A-Z0-9]*将会匹配0到多次字母数字,后面紧接着0到多个非“>”的字符。最后正则表达式的“>”将会匹配“<B>”的“>”。接下来正则引擎将对结束标签之前的字符进行惰性匹配,直到遇到一个“</”符号。然后正则表达式中的“\1”表示对前面匹配的组“([A-Z][A-Z0-9]*)”进行引用,在本例中,被引用的是标签名“B”。所以需要被匹配的结尾标签为“</B>”

你可以对相同的后向引用组进行多次引用,<<([a-c])x\1x\1>>将匹配“axaxa”、“bxbxb”以及“cxcxc”。如果用数字形式引用的组没有有效的匹配,则引用到的内容简单的为空。

一个后向引用不能用于它自身。<<([abc]\1)>>是错误的。因此你不能将<<\0>>用于一个正则表达式匹配本身,它只能用于替换操作中。

后向引用不能用于字符集内部。<<(a)[\1b]>>中的<<\1>>并不表示后向引用。在字符集内部,<<\1>>可以被解释为八进制形式的转码。

向后引用会降低引擎的速度,因为它需要存储匹配的组。如果你不需要向后引用,你可以告诉引擎对某个组不存储。例如:<<Get(?:Value)>>。其中“(”后面紧跟的“?:”会告诉引擎对于组(Value),不存储匹配的值以供后向引用。

前者捕获括号里的内容 后者不捕获。如果能达到同样的效果建议后者,效率稍高。
正则里尽量少写. 比如用[^>]之类的代替点号
如果知道字符串长度范围 比如 捕获微博内容 部分就用 [^>]{0,160}

总之,尽可能减少回溯次数。

.* 代表的是通配符
外边有括号的和不写括号区别在于括号的用法
在正则表达式中 ()表示模式单元
当()的正则式匹配时 可以通过调用模式单元的方法调用匹配的内容
用//1 这种格式 调用

(.*) 可以在后面引用或取值 group(1) 取值或\1引用


文水县19881401127: 正则表达式 (.*) .* 就是这2种写法,有什么却别?分别代表什么含义? -
针睿伏立: .* 代表的是通配符 外边有括号的和不写括号区别在于括号的用法 在正则表达式中 ()表示模式单元 当()的正则式匹配时 可以通过调用模式单元的方法调用匹配的内容 用//1 这种格式 调用

文水县19881401127: 正则表达式<.*?>是什么意思? -
针睿伏立: 表达式 .* 就是单个字符匹配任意次,即贪婪匹配. 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配. 举例介绍: 如:<img src="test.jpg" width="60px" height="80px"/> 懒惰模式正则: src=".*?" 结果:src="test.jpg" 扩展资...

文水县19881401127: 正则表达式<*>什么意思 -
针睿伏立: 点 匹配任何单个字符.例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root. * 匹配0或多个正好在它之前的那个字符.例如正则表达式.*意味着能够匹配任意数量的任何字符. ? 匹配0或1个正好在它之前的那个字符.注意:这个元字符不是所有的软件都支持的.

文水县19881401127: 正则里的(.*?)是什么意思 -
针睿伏立: . 是任意字符 可以匹配任何单个字符,例子:正则表达式r.t 可以匹配这些字符串:rat、rut、r t,但是不匹配root. .*? 表示匹配任意字符到下一个符合条件的字符 例子:正则表达式a.*?xxx 可以匹配 abxxx axxxxx abbbbbxxx 扩展资料:* 匹配0或多...

文水县19881401127: python 正则表达式.*? 是什么意思 详细解释 -
针睿伏立: 分开来说: 1、. 匹配任意除换行符“\n”外的字符; 2、*表示匹配前一个字符0次或无限次;3、+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复; 4、 .*? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复. 如:a.*?b匹配最短的,以a开始,以b结束的字符串.如果把它应用于aabab的话,它会匹配aab和ab.

文水县19881401127: 正则表达式中单独使用一个星号(*)表示什么意思 -
针睿伏立: *表示所有的,即一切都可匹配上. sed '/^*$/d' test^表示开头处, $表示结尾处, 二者合在一起'/^*$/d' 表示所有都在其范围内 ''表示界定范围,便于你引用.^*$表示一年所有的字符串,包括空

文水县19881401127: 正则表达式 !\\^\\.\\*\\$!([^!]+)! 是什么意思 -
针睿伏立: 在java中要进行转义,所以转化成标准正则表达式后就是“ !\^\.\*\$!([^!]+)!” 正则表达式中\^ 表示就是^的本身的意思,\. \$ ,同理得知;所以最后你的表达式表示!^.$! 开头后面跟任意非!的字符串重复一次到无穷次,然后以!结束.例如:1321312!^.$! 123!123123. 如果想让字符串只能是!^.$! 123! ,两边没有其他字符的, 那么在你正则的首加上^尾加上$.

文水县19881401127: 请问正则表达式([^^]*?)是什么意思? -
针睿伏立: 中括号中第一个^表示不包含,第二个^表示字面的这个字符的意思,*表示0个或多个满足中括号中的字符,?表示*尽可能匹配最少的字符【如果不加?,星号*会匹配尽可能多的字符】 本正则单独使用没有任何意义,因为0字符串都能匹配,导致任意字符串都能匹配成功.一般与其他条件一同使用.

文水县19881401127: .*([';]+|( -- )+).* 正则表达式是什么意思 -
针睿伏立: .*([';]+|(--)+).*任意字符 ';这两个字符至少选一个,且最少一次或者 --至少出现一次,或者多次出现 再任意字符比如任意字符''''''--任意字符 任意字符;;;;;;--任意字符 任意字符''''''----任意字符 任意字符''----任意字符 任意字符;----任意字符

文水县19881401127: 正则表达式中的?=.*?的什么意思 -
针睿伏立: \的意思:将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符.例如,“n”匹配字符“n”.“\n”匹配一个换行符.序列“\\”匹配“\”而“\(”则匹配“(”. 而你这句话里边的\不是正则表达式里边的,而是你编程语言的转义字符,即\w表示w

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网