Permalänk
Avstängd

regexp i regexp (.net)

Har som uppgift vid KTH att skriva ett .net forum...

Inget krav men jag lägger till lite fina tagar så man kan qouta folk etc..

har dock svårt att få till qoutes i qoutes...

har denna regexp

(?<quotetag>\[quote="(?<name>.*?)"\](?<post>.*?)\[/quote\])

den funkar bra med en qoute, men en qoute i qoute ser ut såhär

Skrivet av jan_banan:
Skrivet av erik:

test

ni förstår vad problemt komme bli va? den yttre regexp kommer stoppa på den första [/quote] och den kommer allså returnera

[quote="jan_banan"]

Skrivet av erik:

test

den innre regexp kommer då inte att funka eftersom den inte hitra en [/quote] tag.. hur f*n ska man lösa detta?

Visa signatur
Permalänk
Medlem

Trodde jag hade ett svar åt dig, men inte, hade för mig jag såg just ett sånt exempel på regularexpressions.info förut, men den klarade inte nästlade taggar, så jag gjorde lite sökningar för att se om jag kunde hitta någonting och jag såg att folk verkar ha kommit fram till flera saker:

* det är svårt, mycket?.
* det verkar gå men bara om man vet antalet nivåer.

jag hittade även en lösning som jag tror Microsoft kallar för "balanced grouping" i .NET.
balanced grouping verkar inte vara "riktig" regex dock utan vara special för regex i .NET.

Hittade detta på google groups, kolla om det kan hjälpa dig.
http://groups.google.com/group/regex/browse_frm/thread/69f90a...

Permalänk
Avstängd

på nått sätt borde det gå att ställa in så att den tar enbart den sista [/quote] som den hittar? Om detta går är jag homefree för på så sätt kan jag sköta rekursiviteten av genom rekursivt metod anrop..

edit

skumt! Jag provade att efter \[quote\] lägga till $ allså \[quote\]$ detta funkar i Expresso (ett testprogram för regexp) men det funkar inte från mitt program??!

edit2: exakt såhär ser min regexxp ut

Regex quoteRegex = new Regex( @(?<quotetag>\[quote="(?<name>.*?)""\](?<post>.*?)\[/quote\]" + @$), RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled );

funkar hur bra som helst i expresso...

edit3: hehe fast då kommer man inte kunna ha två quotes efter varanda

Visa signatur
Permalänk
Medlem

Anledningen till att $ fungerade i Expresso va nog för att du hade endast precis en quote, ingen annan text alls. $ i slutet gör att det krävs att texten man skrev ska ligga allra sist i strängen.

Tyvärr har jag ingen lösning på ditt problem.

Permalänk
Avstängd

skit samma.. det är overkill som det är för uppgiften redan.. hur ofta vill man göra quote i en quote??

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av CyberVillain
[B]på nått sätt borde det gå att ställa in så att den tar enbart den sista

som den hittar? Om detta går är jag homefree för på så sätt kan jag sköta rekursiviteten av genom rekursivt metod anrop..

edit

skumt! Jag provade att efter \[quote\] lägga till $ allså \[quote\]$ detta funkar i Expresso (ett testprogram för regexp) men det funkar inte från mitt program??!

edit2: exakt såhär ser min regexxp ut

Regex quoteRegex = new Regex( @(?<quotetag>\[quote="(?<name>.*?)""\](?<post>.*?)\[/quote\]" + @$), RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled );

funkar hur bra som helst i expresso...

edit3: hehe fast då kommer man inte kunna ha två quotes efter varanda [/B][/QUOTE]

En anledning till att det inte fungerar i ditt program kan vara att inlägget kanske inte slutar där? $ förutsätter ju att raden eller hela texten slutar där, inte säkert att det gör vid ett inlägg.
Om du bara ska ta reda på den första och den sista så är det inga problem och inte bryr dig om att det kanske är quotes i mitten.

Har du lyckats med din regex så du tar från första till sista?

tar från första quote till sista quote

\[quote\].*\[\/quote\]

tar från första quote till sista quote eller tills slutet (dvs, slut quote krävs inte, den får en match iaf)

\[quote\].*(\[\/quote\])*

Permalänk
Avstängd

allså min regexp fixar att ta alla qoutes i inlägget, första till sista.. men inte quotes i quotes..

Visa signatur