這實際上取決於什麼是強大的。例如,在複雜性方面,RegEx很難處理遞歸。您需要像JavaCC或YACC這樣的編譯器編譯器(編譯器生成)來處理它。這就是您無法完全從RegEx創建XML解析器的原因。 RegEx的大部分時間足夠老練。
就性能而言,RegEx無法與直接解析相競爭。例如,如果您想查看一個字符串是否以單詞「Prefix」開頭;在RegEx中,您選擇'/^Prefix.*/
',但在非RegEx Java中選擇'Str.startsWith("Prefix")
'。兩者的速度無與倫比。
但是,在許多情況下,RegEx允許代碼更易於管理。最簡單的例子是,如果你想檢查一個字符串是否以至少10個數字開頭,在Java中,你可能會這樣寫:
for(int i = 0; i < Math.min(10, Str.length); i++) {
char C = Str.charAt(i);
if ((C < '0') || (C > '0'))
reutrn false;
}
return true;
比較正則表達式:
static final String CheckRegEx = "^[0-9]{10,}+"; // So you have it expressed in one place
static final String CheckPattern = Pattern.compile(CheckRegEx);
if (CheckPattern.matches(Str)) {
// Match
}
用正則表達式的代碼更易於管理。
我想說的是,每種技術都有交易,他們必須是平衡的。
對於大多數情況下,RegEx是一個非常好的工具,它被設計來完成任務。
的侷限性帖子中的正則表達式等於char匹配的代碼。我認爲它應該是:/^[0-9]{10,}+.*/ – p3t0r 2009-10-18 19:32:41
一些正則表達式(例如PCRE)在遞歸方面沒有問題。 – eyelidlessness 2009-10-18 19:37:33
感謝p3t0r,我中途改變了主意,忘記了更新。 :-)。我知道PCRE,但它在許多環境中都不可用。 :-) – NawaMan 2009-10-18 19:48:11