我有這個天真的正則表達式「<([\ s] | [^ <])+?>」(不包括引號)。看起來很簡單,但它對下面的HTML文本起作用時確實是邪惡的。它將Java正則表達式引擎發送到無限循環。爲什麼這個正則表達式會殺死Java正則表達式引擎?
我還有另一個正則表達式(「<。+?>」),它的確有些相同的事情,但它並沒有殺死任何東西。你知道爲什麼發生這種情況嗎?
<script language="JavaScript" type="text/javascript">
var numDivs, layerName;
layerName = "lnavLayer";
catLinkName = "category";
numDivs = 2;
function toggleLayer(layerID){
if (!(navigator.appName == "Netscape" && navigator.appVersion.substr(0, 1) < 5)){
thisLayer = document.getElementById(layerName + layerID);
categoryLink = document.getElementById(catLinkName + layerID);
closeThem();
if (thisLayer.className == 'subnavDefault'){
thisLayer.className = 'subnavToggled';
categoryLink.className = 'leftnavLinkSelectedSection';
}
}
}
function closeThem(){
for(x = 0; x < numDivs; x++){
theLayer = document.getElementById(layerName + (x
+ 1));
thecategoryLink = document.getElementById(catLinkName + (x + 1));
theLayer.className = 'subnavDefault';
thecategoryLink.className = 'leftnavLink';
}
} var flag = 0; var lastClicked = 0
//-->
</script>
它甚至保持與在線的Java正則表達式的工具(如www.fileformat.info/tool/regex.htm)或類似RegexBuddy實用循環。
對無限循環的很好的解釋 – 2008-11-14 16:11:18