第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重復(fù)正則表達(dá)式

重復(fù)正則表達(dá)式

明月笑刀無情 2022-09-07 21:34:48
我有一個要解析的日志文件。它是關(guān)于使用正則表達(dá)式獲取方括號之間和“OK:”之后的值。問題是我不知道模式發(fā)生了多少次,我不能說每個代碼有多長。所以我只能轉(zhuǎn)述它被“[OK:”和“]”包圍的事實(shí)。到目前為止,我試圖在這里使用這個模式作為正則表達(dá)式:String ok_pattern = "(.*itId=<)(.{1,10})(>.*)(\\[OK:)(.{4,27})(].*)";Pattern p_ok = Pattern.compile(ok_pattern);String testString = "RANDOMTEXT itId=<1232> Code < [OK:AZ1000105]  [OK:10000006] [OK:F1000000007] > RANDOMTEXT";Matcher m = p_ok.matcher(testString);if(m.find()) {    System.out.println(m.group(5));}但這僅適用于只有一個“[OK:...]”的情況。我在第5組之后嘗試使用“*”和“+”,但我無法成功。我如何重復(fù)進(jìn)行此操作并仍然捕獲所有結(jié)果?我的目標(biāo)是使用正則表達(dá)式在“OK:”之后提取 itemId 和(char-)數(shù)字組合。因此,在此示例中,我想獲取“1232”(ItemID)和“AZ1000105”,“10000006”,“F1000000007”。我感謝每一個幫助!
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊

您的基本設(shè)置是正確的,但您的模式與理想模式有些偏差。嘗試使用以下正則表達(dá)式模式:


(?<=\[OK:)[^\]]+|(?<=itId=<)[^>]+

這仍然使用一個觀察,但它只斷言前面的是 。然后,它甚至在不使用捕獲組的情況下,匹配任何數(shù)量的字符,這些字符不是右方括號。這對應(yīng)于您嘗試查找的內(nèi)容。交替項右側(cè)的部分與值匹配。[OK:itId


String ok_pattern = "(?<=\\[OK:)[^\\]]+|(?<=itId=<)[^>]+";

Pattern p_ok = Pattern.compile(ok_pattern);

String testString = "RANDOMTEXT itId=<1232> Code < [OK:AZ1000105]  [OK:10000006] [OK:F1000000007] > RANDOMTEXT";


Matcher m = p_ok.matcher(testString);

while (m.find()) {

    System.out.println(m.group(0));

}


1232

AZ1000105

10000006

F1000000007


查看完整回答
反對 回復(fù) 2022-09-07
?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗 獲得超8個贊

如果你想捕獲 中的數(shù)字,然后以該順序捕獲后面的內(nèi)容,你可以利用錨點(diǎn)來斷言上一場比賽結(jié)束時的位置。itId=<1232>OK:\G

匹配第一個捕獲組中的數(shù)字和第二個捕獲組中的值:itIdOK:

itId=<(\d+)> Code < |\G(?!^)\[OK:([A-Z0-9]+)\]\s*

在爪哇:

String ok_pattern = "itId=<(\\d+)> Code < |\\G(?!^)\\[OK:([A-Z0-9]+)\\]\\s*";

解釋

  • itId=<(\d+)> Code <匹配第一部分并在組 1 中捕獲 1 位以上數(shù)字

  • |

  • \G(?!^)上一場比賽結(jié)束,而不是在開始時

  • \[OK:([A-Z0-9]+)\]\s*Match ,然后在組 2 中捕獲您的值并進(jìn)行匹配,后跟 0 個以上的空格字符[OK:]

正則表達(dá)式演示|Java 演示

請注意,如果要匹配更多,也可以使用否定字符類來匹配而不是方括號([A-Z0-9]+)([^]]+)

例如,您可以檢查組是否存在:

String ok_pattern = "itId=<(\\d+)> Code < |\\G(?!^)\\[OK:([^]]+)\\]\\s*";

Pattern p_ok = Pattern.compile(ok_pattern);

String testString = "RANDOMTEXT itId=<1232> Code < [OK:AZ1000105]  [OK:10000006] [OK:F1000000007] > RANDOMTEXT";

Matcher m = p_ok.matcher(testString);


while(m.find()) {

    if (null != m.group(1)) {

        System.out.println("itId: " + m.group(1));  

    }

    if (null != m.group(2)) {

        System.out.println("Ok code: " + m.group(2));   

    }   

}


查看完整回答
反對 回復(fù) 2022-09-07
  • 2 回答
  • 0 關(guān)注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號