Tengo esta expresión ingenua "< ([\ s] | [^ <]) +?>" (Sin incluir las comillas). Parece tan sencillo pero de hecho es malo cuando funciona contra el texto HTML a continuación. Envía el motor de expresiones regulares de Java a un bucle infinito.¿Por qué esta expresión regular mata al motor de expresiones regulares de Java?
Tengo otra expresión regular ("<. +?>"), Que hace más o menos lo mismo, pero no mata nada. ¿Sabes por que pasa esto?
<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>
aún mantiene un bucle con una herramienta de expresiones regulares de Java en línea (como www.fileformat.info/tool/regex.htm) o una utilidad como RegexBuddy.
Gran explicación para el bucle infinito –
Esta respuesta muestra que no es realmente un bucle infinito, solo uno que se ejecuta en tiempo exponencial. –
Volví una semana después y encontré esta excelente respuesta. Gracias – Martin08