<%
' En länk som man skrivit felaktigt (Glömt ena hakparantesen i )
strText = "Lite text innan länken Text efter länken!Text efter länken! Text efter länken!Text efter länken! Text efter länken!Text efter länken! "
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
? : Matches the preceding character or subexpression zero or one time, or indicates a non-greedy quantifier.
* : Matches the preceding character or subexpression zero or more times.
Nu är jag långt ifrån en hejjare på regexp, men jag tycker kombinationen *? blir väldigt underlig. Själv skulle jag vilja ha ((.|\s)*), men det lär väl inte fungera. Det kan väl kanske vara så att *? kombinationen efter vissa former av subexpressions inte kan hanteras utan skapar skumma looper i tolken, vilket verkar vara fallet med ((.|\s)*?).
Jag testade ditt uttryck med Vides Regexptester och då gick det nästan bra... tog en jäkla tid båda varianterna. F'låt Vide om din server fick tugga regexp ett tag :e
<%
' En länk som man skrivit felaktigt (Glömt ena hakparantesen i )
strText = "Lite text innan länken Text efter länken!Text efter länken! Text efter länken!Text efter länken! Text efter länken!Text efter länken! Text efter länken!Text efter länken! Text efter länken!Text efter länken! Text efter länken!Text efter länken! "
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
Ingen som kan komma med en bra förklaring på varför detta händer? Jag tycker det är en "livsfarlig" bugg.. alla som använder liknande mönster kan alltså få sina webbservrar sänkta bara för att man glömmer en hakparantes?!?!
Ja. Du hade onekligen rätt. Dllhost.exe skenar och lägger sig på 100% CPU.
Tyvärr är jag inte tillräckligt insatt i regexp för att kunna säga att det är en bugg, men när jag testar i VB så märkte jag att problemet uppstår när det finns för många blanktecken sammanlagt efter den sista hakparentesen (ca 25 st). Alla övriga tecken verkar gå bra. Kanske det är nån som får nån idé av detta?
På en skarp server är det så klart som du säger "livsfarligt". Antingen så får du försöka hitta ett annat pattern, eller så får du se till att exlicit kolla efter för många blankslag innan du skickar in det till Regexp.
Man ska vara väldigt noggrann när man skriver reguljära uttryck, det är mycket lätt att skapa uttryck som hamnar i väldigt djupa rekursioner och det är ? och * man ska vara försiktig med.
Jag vet inte så mycket om RegExp, men för mig verkar iaf det här patternet funka: "\(.*|\s*)\[\/url\]"
Men det kanske inte blir riktigt rätt med det som du ska göra?