[英]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.