亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3534 | 回復(fù): 3
打印 上一主題 下一主題

經(jīng)驗(yàn)介紹:利用gawk擴(kuò)展的match(s,r,a)功能匹配多個(gè)括號(hào) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-01-20 01:08 |只看該作者 |倒序?yàn)g覽
gawk匹配多個(gè)括號(hào),結(jié)果放在數(shù)組a中,記得以前用過.
現(xiàn)在想一次性將所有匹配到的結(jié)果放到數(shù)組中,結(jié)果只取到一個(gè).
帶最后一個(gè)*時(shí)取到最后一個(gè),不帶最后一個(gè)*時(shí)取到第1個(gè)
bash-3.2$ cat match1.xml.awk
echo "<a><c>kjkjkj</c></a><b>jkjk</b><a>jkjk</a><d>dddd</d>
<a><c>kjkjkj</c></a><b>jkjk</b><a>jkjk</a><d>dddd<dd>
aaaaaaaaa44444bbbbbbbb7777777ccccccc99999dddddddd000000"|awk --re-interval '
{
  n=match($0,"(<(/?[^>]+)>([^<]*))*",a);
  i=0;
  for (;i<=n;i++){
    print "a:i="i,"a["i"]="a[ i ],"n="n;
  }
  n=match($0,"(([a-z]*)([0-9]*))*",a);
  i=0;
  for (;i<=n;i++){
    print "b:i="i,"a["i"]="a[ i ],"n="n;
  }
}
'
bash-3.2$  match1.xml.awk
a:i=0 a[0]=<a><c>kjkjkj</c></a><b>jkjk</b><a>jkjk</a><d>dddd</d> n=1
a:i=1 a[1]=</d> n=1
b:i=0 a[0]= n=1
b:i=1 a[1]= n=1
a:i=0 a[0]=<a><c>kjkjkj</c></a><b>jkjk</b><a>jkjk</a><d>dddd<dd> n=1
a:i=1 a[1]=<dd> n=1
b:i=0 a[0]= n=1
b:i=1 a[1]= n=1
a:i=0 a[0]= n=0
b:i=0 a[0]=aaaaaaaaa44444bbbbbbbb7777777ccccccc99999dddddddd000000 n=1
b:i=1 a[1]=dddddddd000000 n=1
bash-3.2$

希望得到的結(jié)果:
第1句
a[1]="<a>"
a[2]="a"
a[3]=""
a[4]="<c>kjkjkj"
a[5]="c"
a[6]="kjkjkj"
....
第2句:
a[1]="aaaaaaaaa44444"
a[2]="aaaaaaaaa"
a[3]="44444"
a[4]="bbbbbbbb7777777"
a[5]="bbbbbbbb"
a[6]="7777777"
能實(shí)現(xiàn)嗎?難道我記錯(cuò)了?
=======================================================================
(以下內(nèi)容為樓主2009年1月20日新增,同時(shí)修改了本貼標(biāo)題)
謝謝2樓回答,確實(shí)只有顯式的()個(gè)數(shù)才算,隱式重復(fù)的只算最后一遍的()。
match返回匹配的位置,我錯(cuò)把它當(dāng)作找到的()個(gè)數(shù)用了。
這個(gè)用法相信對(duì)大家是有用的,所以我將正將答案放到頂樓了(條件是有支持GNU extensions,即gawk):

bash-3.2$ cat match1.xml.awk
echo "<a><c>kjkjkj</c></a><b>jkjk</b><a>jkjk</a><d>dddd</d>
aaaaaaaaa44444bbbbbbbb7777777ccccccc99999dddddddd000000"|awk --re-interval '
{
  n=match($0,"(<(/?[^>]+)>([^<]*))+",a);
  if (n>0) {
    print "a:a[0]="a[0],"RSTART="RSTART,"RLENGTH="RLENGTH;
    for (i=1;a[i,"start"]!="";i++){
      print "a:i="i,"a["i"]="a[ i ],"|";
    }
  }
  delete a;
  n=match($0,"(([a-z]*)([0-9]*))+",a);
  if (n>0) {
    print "a:a[0]="a[0],"RSTART="RSTART,"RLENGTH="RLENGTH;
    for (i=1;a[i,"start"]!="";i++){
      print "b:i="i,"a["i"]="a[ i ],"|";
    }
  }
  delete a;
}
'
bash-3.2$  match1.xml.awk
a:a[0]=<a><c>kjkjkj</c></a><b>jkjk</b><a>jkjk</a><d>dddd</d> RSTART=1 RLENGTH=53
a:i=1 a[1]=</d> |
a:i=2 a[2]=/d |
a:i=3 a[3]= |
a:a[0]= RSTART=1 RLENGTH=0
b:i=1 a[1]= |
b:i=2 a[2]= |
b:i=3 a[3]= |
a:a[0]=aaaaaaaaa44444bbbbbbbb7777777ccccccc99999dddddddd000000 RSTART=1 RLENGTH=55
b:i=1 a[1]=dddddddd000000 |
b:i=2 a[2]=dddddddd |
b:i=3 a[3]=000000 |

a[0]是匹配全文,a[1]是最后一遍第1個(gè)(),是最外層的,a[2]是第2個(gè)(),也是內(nèi)層前1個(gè),a[3]是第3個(gè)(),也是內(nèi)層后1個(gè)。
重復(fù)匹配時(shí),只有最后一遍記住了。

[ 本帖最后由 zhangshebao 于 2009-1-20 21:34 編輯 ]

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
2 [報(bào)告]
發(fā)表于 2009-01-20 08:43 |只看該作者
1.正則表達(dá)式是貪婪的
2.*可以匹配0個(gè)
3.你只用了三個(gè)()捕捉,可以得到6個(gè)結(jié)果?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-01-20 21:37 |只看該作者
謝謝waker.
match(s,r,a)貼子不多,希望對(duì)大家有用。
如果有辦法讓awk記住重復(fù)匹配的()就更好了。

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
4 [報(bào)告]
發(fā)表于 2009-01-21 09:54 |只看該作者
其實(shí)有個(gè)落后而廣泛應(yīng)用的方法,match與sub聯(lián)用
http://phi.sinica.edu.tw/aspac/reports/94/94011/append_c.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP