正则表达式匹配的问题
字符串:<LOOP1 ChannelID=1111 Count=15 TitleLength=200>
<td><LOOP2 ChannelID=20390 Count=20 TitleLength=100>123456</Loop2></Loop1>
<LOOP1 ChannelID=2222 Count=16 TitleLength=300>
<td><LOOP2 ChannelID=20333 Count=20 TitleLength=100>654321</Loop2></Loop1>
其中有两个<LOOP1 ...></LOOP>,我想把两个都匹配出来,我现在用的正则式是:
(<loop1\s[^>]+>[\s\S]+</loop1>)
现在只匹配出一个来:
<LOOP1 ChannelID=1111 Count=15 TitleLength=200>
<td><LOOP2 ChannelID=20390 Count=20 TitleLength=100>123456</Loop2></Loop1>123
333<LOOP1 ChannelID=2222 Count=16 TitleLength=300>
<td><LOOP2 ChannelID=20333 Count=20 TitleLength=100>654321</Loop2></Loop1>
就是没有将两个LOOP1分出来,请问应该怎么处理?
问题点数:100、回复次数:11Top
1 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-01 18:36:10 得分 80
<textarea name="textarea1">
:<LOOP1 ChannelID=1111 Count=15 TitleLength=200>
<td><LOOP2 ChannelID=20390 Count=20 TitleLength=100>123456</Loop2></Loop1>
<LOOP1 ChannelID=2222 Count=16 TitleLength=300>
<td><LOOP2 ChannelID=20333 Count=20 TitleLength=100>654321</Loop2></Loop1>
</textarea>
<script language=javascript>
var str=document.getElementById("textarea1").value
re=/<loop1\s[^>]+>([\s\S](?!(<loop1)))+<\/loop1>/ig
a=str.match(re)
for(var i=0;i<a.length;i++)
{
alert(a[i])
}
</script>Top
2 楼moodboy1982(老鹰)回复于 2006-06-01 18:47:08 得分 0
http://www.esoftnow.com/bbs/dispbbs.asp?boardID=6&ID=72&page=1Top
3 楼meizz(梅花雪)回复于 2006-06-02 09:27:29 得分 20
用非贪婪式匹配:
<SCRIPT LANGUAGE="JavaScript">
<!--
var s = "<LOOP1 ChannelID=1111 Count=15 TitleLength=200><td><LOOP2 ChannelID=20390 Count=20 TitleLength=100>123456</Loop2></Loop1><LOOP1 ChannelID=2222 Count=16 TitleLength=300><td><LOOP2 ChannelID=20333 Count=20 TitleLength=100>654321</Loop2></Loop1>";
var r = /<loop1\s[^>]+>[\s\S]+?<\/loop1>/gi; //这个与你的正则只是多了一个 ? 而已
var a = s.match(r);
alert(a[0]);
alert(a[1]);
//-->
</SCRIPT>Top
4 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 09:42:18 得分 0
学习,今天才终于知道为什么要是.+?了。Top
5 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2006-06-02 10:06:31 得分 0
8好意思,再问一下,为什么要多这个?呢?Top
6 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 10:28:07 得分 0
上面不是说了吗?
加了?号就是非贪婪模式,也叫做勉强模式,正则这个东西都很贪,.+的话是匹配尽可能多的字符,而在加上一个?就是匹配第一个可以匹配的字符Top
7 楼eglic(圪圪) (理由永远是谎言,信仰永远是自慰)回复于 2006-06-02 10:31:49 得分 0
哈哈,VB版的大牛,到这里也绿了~Top
8 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 10:32:14 得分 0
晕倒,原来是VB版的。:)Top
9 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 10:33:03 得分 0
hehe,还是被你先发现了,我也发现了。Top
10 楼mingxuan3000(铭轩)回复于 2006-06-02 10:42:13 得分 0
那个名字熟悉Top
11 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2006-06-02 10:48:02 得分 0
明白了,谢谢天外水火。给分。
还有梅花,MUA 一个~~~~~Top




