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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4309 | 回復(fù): 19
打印 上一主題 下一主題

看一下這個正則表達式(還沒完全解決,見1樓) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-08-17 11:30 |只看該作者 |倒序瀏覽
本帖最后由 ztkx 于 2010-08-20 16:52 編輯

需要匹配的是xxxXX, x is [a-zA-Z0-9],首字母不為數(shù)字,XX為一特定的單詞

最先想到的是lookingbehind,但是似乎只能在前面定長的情況下,比如foo(?=bar)
如果我想匹配fobar,foobar,lsbar等等怎麼辦

當然只是一個獨立的單詞好辦,問題是這是一個字符串的一部分,所以沒法用bar$

thanks for help

還有一些疑問,對於這樣一個dn
  1. my $dn = "cn=admin, ou=10HH,ou=JCAC,ou=CCXX,ou=ooCA,ou=XXCA,ou=RootCA";
復(fù)制代碼
  1. my $dn_re = '^(cn\s*=\s*\w+)\s*,\s*
  2. ((ou\s*=\s*\w*?(?!CA)\b\s*,\s*)*?)
  3. ((ou\s*=\s*\w*CA\b\s*,\s*)*?)
  4. (ou\s*=\s*RootCA)';
復(fù)制代碼
這個表達式的匹配是正確的

  1. $1 = cn=admin
  2. $2 =  ou=10HH,ou=JCAC,ou=CCXX,
  3. $4 = ou=ooCA,ou=XXCA,
  4. $6 = ou=RootCA
復(fù)制代碼
但是這個就不對了
  1. my $dn_re = '^(cn\s*=\s*\w+)\s*,\s*
  2. ((ou\s*=\s*\w*?(?!CA)\b\s*,\s*)*)
  3. ((ou\s*=\s*\w*[b](?=CA)[/b]\b\s*,\s*)*)
  4. (ou\s*=\s*RootCA)';
復(fù)制代碼
使用?=斷言或者沒有對二、四組使用非貪婪模式,都回導(dǎo)致匹配錯誤,這時候

  1. $2 = ou=10HH,ou=JCAC,ou=CCXX,ou=ooCA,ou=XXCA,
  2. $4 = undef
  3. $6 = ou=RootCA
復(fù)制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2010-08-17 11:49 |只看該作者
回復(fù) 1# ztkx


    bar\b

論壇徽章:
0
3 [報告]
發(fā)表于 2010-08-17 12:35 |只看該作者
回復(fù) 2# guap514

不好意思,寫錯了我不該寫$的,具體是這樣

ou=xxxx,ou=xxxx,ou=xxxCA,ou=xxxxCA,

沒辦法,以前的系統(tǒng)是這麼寫的,所以我現(xiàn)在要把CA域分離出來,like ou=xxxCA,ou=xxxxCA,
ou的個數(shù)不固定,xxx的位數(shù)也不固定

論壇徽章:
0
4 [報告]
發(fā)表于 2010-08-17 12:40 |只看該作者
my $str = "ou=xxxx,ou=xxxx,ou=xxxCA,ou=xxxxCA";
while ($str =~ /(ou=[a-zA-Z]\w*CA)/g)
{
        print $1, "\n";
}

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
5 [報告]
發(fā)表于 2010-08-17 12:42 |只看該作者
split一下不是可以用\b了

論壇徽章:
0
6 [報告]
發(fā)表于 2010-08-17 12:46 |只看該作者
回復(fù) 4# 黑色陽光_cu

謝謝,如果xxxx內(nèi)部包含CA呢, like ou=ACAD, or ou=DCANUCA

論壇徽章:
0
7 [報告]
發(fā)表于 2010-08-17 13:05 |只看該作者
本帖最后由 黑色陽光_cu 于 2010-08-17 13:12 編輯

#!/bin/env perl

use strict;
use warnings;

my $str = "ou=xxxx,ou=xxxx,ou=xxxCA,ou=xxxxCA, ou=ACAD, ou=DCANUCA";
while ($str =~ /(ou=[a-zA-Z]\w*CA)\b/g)
{
        print $1, "\n";
}

論壇徽章:
0
8 [報告]
發(fā)表于 2010-08-17 13:12 |只看該作者
thanks

論壇徽章:
0
9 [報告]
發(fā)表于 2010-08-17 13:54 |只看該作者
while ($str =~ /(ou=[a-zA-Z]\w*CA)$/g;
為什么換成這樣就只能打印出ou=DCANUCA
$不是正則表達式里的字符串結(jié)束么

論壇徽章:
0
10 [報告]
發(fā)表于 2010-08-17 14:13 |只看該作者
本帖最后由 ztkx 于 2010-08-17 14:22 編輯

  1. my $ca_re = '((ou=\w*CA\B)*)((\,ou=\w*CA\b)*)';
  2. my $ca = 'ou=NCAC,ou=CACA,ou=LDNCACCA';

  3. my @matched_arr = $ca =~ /$ca_re/;
  4. for (0..$#matched_arr) {
  5.         if ($matched_arr[$_]) {
  6.         print $_."=".$matched_arr[$_]."\n";
  7. }

復(fù)制代碼
output:

  1. 0=ou=NCA
  2. 1=ou=NCA
  3. 10=,ou=CACA,ou=LDNCACCA
  4. 11=,ou=LDNCACCA
復(fù)制代碼
0,1匹配值不對,10,11,有這麼多分組麼

g是做什麼用的,這裡沒有多次匹配的問題啊,但如果不加g,則只能匹配0,1分組,也即
  1. ((ou=\w*CA\B)*)
復(fù)制代碼
sorry ,這樣做不對,我再改改先
  1. my $ca_re = '((ou=\w*(?!CA)\b)*)((\,ou=\w*CA\b)*)';
復(fù)制代碼
ok了
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP