簡體   English   中英

Java的正則表達式模式分類?

[英]Regex pattern classification for Java?

例如,我想對c * t => CLASS1和d * g => CLASS2進行分類:

Pattern CXT = Pattern.compile("^c.*t$");
Pattern DXG = Pattern.compile("^d.*g$");

public int classify(String in) {
    if (CXT.matches(in)) return CLASS1;
    if (DXG.matches(in)) return CLASS2;
    return -1;
}

如果有很多模式,效率很低。

假設所有模式都是正交的,則很容易看到一個DFA中的一次通過就足夠了。 那么,是否存在可以將所有模式組合在一起的正則表達式處理器?

您應該看一下dk.brics.automaton軟件包,它並不是您要找的東西,但這是一個具有BSD license的非常快速的狀態機實現。

因此,您可以建立自動機,該自動機比正則表達式更快地完成分類。

您可以執行例如(未測試):

Pattern pat = Pattern.compile("^((c.*t)|(d.*g))$");


public int classify(String in) {
    Matcher m = pat.matcher(in);
    if (m.matches()) {
        if ( m.group(2) != null ) {
             return C;
        }
        else if ( m.group(3) != null ) {
         return D;
        }
    }
    return -1;
}

但我不確定這是否會比您當前的代碼更有效。 無論哪種方式,您都必須比較所有可能模式的輸入,無論是顯式進行還是將其構建到正則表達式中

/^((c.*t)|(d.*g))$/

然后,您查看是否找到了匹配項。 如果看到$ 2,則返回CLASS1。 如果看到$ 3,則返回CLASS2等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM