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

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

匹配正則表達(dá)式中的最長字符串或在常見子字符串的情況下

匹配正則表達(dá)式中的最長字符串或在常見子字符串的情況下

撒科打諢 2022-06-30 18:31:59
在正則表達(dá)式 OR 中,當(dāng)有多個(gè)具有公共前綴的輸入時(shí),正則表達(dá)式將匹配第一個(gè)輸入Regex OR而不是最長匹配。例如,對(duì)于正則表達(dá)式regex = (KA|KARNATAKA),input = KARNATAKA輸出將是 2 個(gè)匹配項(xiàng)match1 =KA和match2 = KA.但是我想要的Regex OR是match1 = KARNATAKA在我給定示例中的給定輸入中完成最長可能匹配。這是正則表達(dá)式客戶端中的示例所以我現(xiàn)在正在做的是,我Regex OR按長度按降序?qū)斎脒M(jìn)行排序。我的問題是,我們可以在正則表達(dá)式本身中指定匹配最長的字符串嗎?還是排序是唯一的方法?我已經(jīng)提到了這個(gè)問題,除了排序我沒有看到其他解決方案
查看完整描述

2 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

您可以使用單詞邊界 ( \b) 來避免匹配前綴

對(duì)于您提到的情況:以下正則表達(dá)式將僅匹配KAKARNATAKA

(\bKA\b|\bKARNATAKA\b)

在這里試試


查看完整回答
反對(duì) 回復(fù) 2022-06-30
?
繁星點(diǎn)點(diǎn)滴滴

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

您可以為此創(chuàng)建一個(gè)輔助方法:


public final class PatternHelper {

    public static Pattern compileSortedOr(String regex) {

        Matcher matcher = Pattern.compile("(.*)\\((.*\\|.*)\\)(.*)").matcher(regex);


        if (matcher.matches()) {

            List<String> conditions = Arrays.asList(matcher.group(2).split("\\|"));

            List<String> sortedConditions = conditions.stream()

                                                      .sorted((c1, c2) -> c2.length() - c1.length())

                                                      .collect(Collectors.toList());


            return Pattern.compile(matcher.group(1) +

                                       "(" +

                                       String.join("|", sortedConditions) +

                                       ")" +

                                       matcher.group(3));

        }


        return Pattern.compile(regex);

    }

}


Matcher matcher = PatternHelper.compileSortedOr("(KA|KARNATAKA)").matcher("KARNATAKA");

if (matcher.matches()) {

    System.out.println(matcher.group(1));

}

輸出:


KARNATAKA

PS 這僅適用于沒有嵌套括號(hào)的簡單表達(dá)式。如果您期望非常復(fù)雜的表達(dá)式,則需要進(jìn)行調(diào)整。


查看完整回答
反對(duì) 回復(fù) 2022-06-30
  • 2 回答
  • 0 關(guān)注
  • 232 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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