正则表达式中的javascript 正向预查肯定预查该怎么做

正向预查写在前面是什么意思?_正则表达式吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,371贴子:
正向预查写在前面是什么意思?收藏
正则表达式&
(?=2)\d&
匹配123123&
结果是匹配到两个2&
*****************&
而正则表达式&
\d(?=2)&
匹配123123可以匹配出两个1,这时(?=2)写在要匹配内容得后面,像这样的我可以理解&。那么请问高手把正向预查写在前面是什么意思?&
能否举例说明一下,谢谢
亚马逊AWS-云创计划.最高可达10万元免费云资源!
理解这个问题,首先是要明白(?=...)的作用。与^和$类似,(?=...)匹配的是满足某条件的一个位置,而并不占据实际字符。^:字符串开始的位置。$:字符串结束的位置。(?=...):字串中含有...的位置。举例:^2:以2开头的字串,例如,2xdf,23,都是匹配的字串。x2df,32,则不匹配。2$:以2结尾的字串,例如,xdf2,32,都是匹配的字串。x2df,323,则不匹配。x(?=\d)表示匹配“右侧有一位数字的x”,因此,x2sdf,x33333,都是可以匹配的,而xxjia则是不匹配的。x(?=\d),这里面的(?=\d)是约束x右面的一位字符的情况。只起约束作用,不返回实际的匹配内容。如果是这种情况呢(?=x)y,此处x与y可以理解为不同的子正则表达式。此时,x与y是指的同一位置,该位置可以同时满足x与y的正则条件。举例说明:(?=2)\d&表示该处是数字2(已经明确界定),而且还必须是一位数字。它与(?=2)\w,或(?=2).都是等价的。因为(?=2)是个较窄的界定,它包含于\d或\w或万能的.之内。因此,(?=...)用在前面时,作用是与后面的正则式一起,其正则式的交集来限定所匹配的内容。例如,我们可以这样写:(?=[^0-57-9])\d(?=[^0-35-9])\d&匹配一位(不是0-5、7-9)的一位(数字)&和&一位不是(0-3、5-9)的一位(数字)那这位数字是什么呢?
终于弄明白啦!
********************************************************
(?=...)用在前面时,作用是与后面的正则式一起,其正则式的交集来限定所匹配的内容。
********************************************************
谢谢&zhasm&的热心帮助!
(?=x)y不是取x和y的交集,(?=x)只是表明位置,比如:(?=3)\d*可以匹配"2322"中的"322",如果是交集,那只能匹配"3"
(?=x)的位置取的是左边界
回复:2楼谢谢2楼同志,看了之后对定位符的理解很有帮助
5楼6楼的你们测试过吗?我也一直纳闷(?=)写在前面得不到所要的结果,看了2楼的就了解了但是,预查限定字符串之前的内容该如何写呢?是不是就不能做到了?
不好意思,5楼正解(?=)写在前面是限定匹配字符串的开始(这个开始包括在结果中,限定几位要看里面的内容)但是,如何能做到预查前面呢
回查 (?&=)
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或正则表达式高级规则中预搜索和反向预搜索用法
Flex正则表达式(regularexpression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+”描述的特征是“一个'a'和任意个'b'”,那么'ab','abb','abbbbbbbbbb'都符合这个特征。
Flex正则表达式可以用来:
(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
(3)用来替换,比普通的替换更强大。
Flex正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉Flex正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。
预搜索,不匹配;反向预搜索,不匹配
前面的章节中,我讲到了几个代表抽象意义的特殊符号:"^","$","\b"。它们都有一个共同点,那就是:它们本身不匹配任何字符,只是对"字符串的两头"或者"字符之间的缝隙"附加了一个条件。理解到这个概念以后,本节将继续介绍另外一种对"两头"或者"缝隙"附加条件的,更加灵活的表示方法。
◆Flex正则表达式正向预搜索:"(?=xxxxx)","(?!xxxxx)"
格式:"(?=xxxxx)",在被匹配的字符串中,它对所处的"缝隙"或者"两头"附加的条件是:所在缝隙的右侧,必须能够匹配上xxxxx这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似"\b",本身不匹配任何字符。"\b"只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。
举例1:表达式"Windows(?=NT|XP)"在匹配"Windows98,WindowsNT,Windows2000"时,将只匹配"WindowsNT"中的"Windows",其他的"Windows"字样则不被匹配。
举例2:表达式"(\w)((?=\1\1\1)(\1))+"在匹配字符串"aaaffffff"时,将可以匹配6个"f"的前4个,可以匹配9个"9"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。当然,这个表达式可以不这样写,在此的目的是作为演示之用。
格式:"(?!xxxxx)",所在缝隙的右侧,必须不能匹配xxxxx这部分表达式。
举例3:表达式"((?!\bstop\b).)+"在匹配"fdjkaljfdlstopfjdslafdj"时,将从头一直匹配到"stop"之前的位置,如果字符串中没有"stop",则匹配整个字符串。
举例4:表达式"do(?!\w)"在匹配字符串"done,do,dog"时,只能匹配"do"。在本条举例中,"do"后边使用"(?!\w)"和使用"\b"效果是一样的。
◆Flex正则表达式反向预搜索:"(?&=xxxxx)","(?
这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的"左侧",两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与"正向预搜索"一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。
举例5:表达式"(?&=\d{4})\d+(?=\d{4})"在匹配"3456"时,将匹配除了前4个数字和后4个数字之外的中间8个数字。由于JScript.RegExp不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如:Java1.4以上的java.util.regex包,.NET中System.Text.RegularExpressions命名空间,以及本站推荐的最简单易用的DEELX正则引擎。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。苹果/安卓/wp
积分 354, 距离下一级还需 96 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡下一级可获得
道具: 抢沙发
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
苦逼签到天数: 25 天连续签到: 1 天[LV.4]偶尔看看III
我比如我想查找c( “abc&,&+b+&,&abb& )中的在两个加号之间的&b&,而不是&abc&中的&b&,那我认为应该使用正/反向肯定预查:
grep(&(?&=\\+)b(?=\\+)&, c ) ,但是软件报错说 错误的政策表达式,到底是哪里错了呢?求帮助!
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
R里不支持这种。
同问有没有全面一些的正则表达式的包
试一试这个:
x &- c( &abc&,&+b+&,&abb& )
grep(&[+]b[+]&,x)复制代码
grep(&(?&=\\+)b(?=\\+)&, c ,perl=TRUE)复制代码
总评分:&学术水平 + 5&
热心指数 + 5&
如四楼所言,R中要使用正则式的“高级”用法的话需要设置perl=TRUE。具体内容在?grep里有说明。
初级热心勋章
初级热心勋章
中级热心勋章
中级热心勋章
初级信用勋章
初级信用勋章
初级学术勋章
初级学术勋章
中级信用勋章
中级信用勋章
高级热心勋章
高级热心勋章
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
论坛法律顾问:王进律师1780人阅读
正向预搜索(向右)
正向预搜索,判断当前位置右侧是否能匹配指定表达式
preg_match_all('/(&div class\=\&list-info\&&.*?(?=&\/div&))/si', $data, $match);
$competitionArr= array();
for($i=0; $i&count($match[1]); $i++){
$competitionArr[]=$match[1][$i];
正向预搜索否定,判断当前位置右侧是否不能够匹配指定表达式
反向预搜索(向左)
反向预搜索,判断当前位置左侧是否能够匹配指定表达式
反向预搜索否定,判断当前位置左侧是否不能够匹配指定表达式
预搜索分两种,一种是向右,另外一种是向左,
以下是各个表达式在.net中的使用例子:
1.向右肯定搜索:
string rega = @&(?=[^1-9]\d+)&;
string test=&1t2t5&;
MatchCollection mc= Regex.Matches(test,rega);
此时返回的结果集中包含 2,5.
2.向右否定搜索:
string regb = @&(?![^1-9])(\d+)&;
string test=&1t2t5&;
MatchCollection mc= Regex.Matches(test,regb);
此时返回的结果集中包含 1,2,5.
3.向左肯定搜索:
string regb = @&(?&=[^1-9])(\d+)&;
string test=&1t2t5&;
MatchCollection mc= Regex.Matches(test,regb);
此时返回的结果集中包含 2,5
4.向左否定搜索:
string regb = @&(\d+)(?&![^1-9])&;
string test=&1t2t5&;
MatchCollection mc= Regex.Matches(test,regb);
此时返回的结果集中包含 1,2,5
不知道为什么,当(\d+)在向左反向预搜索表达式右边时,返回的结果集元素会少一位 ,思考中.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:869557次
积分:12503
积分:12503
排名:第946名
原创:352篇
转载:259篇
评论:50条
(1)(1)(2)(2)(2)(1)(1)(1)(1)(2)(3)(1)(1)(1)(1)(2)(1)(7)(8)(10)(14)(10)(18)(14)(15)(5)(3)(9)(6)(3)(3)(3)(7)(1)(4)(12)(14)(6)(17)(13)(21)(29)(6)(8)(15)(9)(7)(4)(3)(4)(8)(1)(4)(2)(2)(2)(3)(4)(5)(11)(4)(4)(7)(3)(2)(8)(4)(8)(17)(15)(9)(22)(20)(3)(4)(3)(7)(13)(19)(20)(45)

我要回帖

更多关于 js 正则 正向预查 的文章

 

随机推荐