[ASP] RegEx Pattern probleempje?

Pagina: 1
Acties:

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 07-09 20:55

dmnq

zonder klinkers

Topicstarter
Ik ben nogal nieuw in het RegEx wereldje...

Nou heb ik deze:
code:
1
    regEx.Pattern = "(\\[b\])(.+?)(\\[\/b\])"

Alleen nu krijg ik de volgende foutmelding
code:
1
2
3
Microsoft VBScript runtime error '800a139a' 

Unexpected quantifier

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


  • tomato
  • Registratie: November 1999
  • Niet online
De Microsoft regex library kent geen greedyness modifier, dus hij zit het vraagteken ook na een plus als quantifier. En aangezien dat een illegale positie is voor een quantifier krijg je de foutmelding.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Vanaf vbscript 5.5 werkt ".+?" pas.

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 07-09 20:55

dmnq

zonder klinkers

Topicstarter
hoe los ik dan heet greedyness probleem op....

want wanneer ik nu dit doe:

[ b ]tekst[ / b ] en nog een keer [ b ]tekst[ / b ]

dan maakt hij er dit van

tekst en nog een keer tekst

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
vbscript 5.5 installeren?
Als je bij een hosting-provider zit, zal dat lastiger worden. Ik heb er ook al een keer om gevraagd, maar dat hebben ze nog steeds niet gedaan :(. Gelukkig is het geen essentiele feature die de gebruikers hierdoor moeten missen.

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 07-09 20:55

dmnq

zonder klinkers

Topicstarter
wordt gehost bij IS.nl ...

dus dat wordt morgen navragen of het bij hun mogelijk is.
mocht dat nou niet het geval zijn, wat doe ik dan???

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


  • tomato
  • Registratie: November 1999
  • Niet online
Er is wel omheen te 'regexen' maar dat is allesbehalve mooi. Je kunt om te beginnen afspreken dat er binnen bold-tags geen andere tags voor mogen komen, dan is het makkelijk:
code:
1
_\\[b\]([^\\[]*)\\[/b\]_

Maar dat wil je niet natuurlijk. We kunnen een stap verder gaan, we staan geen tags binnen de bold-tag toe die beginnen met de 'b':
code:
1
_\\[b\](([^\\[]|\\[[^b])*)\\[/b\]_

Als je geen andere tags hebt die beginnen met een 'b' is dit al een redelijke oplossing. Je zegt hier dat er tussen de bold-tag voor mag komen:

* Alles behalve een [
* Of een [ met daar achter alles behalve een b

Als je nog meer tags hebt die beginnen met een 'b' kun je dit natuurlijk verder uitbouwen op deze manier, maar mooier wordt het er niet op.

Overigens is deze constructie nog wel iets te optimaliseren, maar dat is een volgende stap.

Conclusie is dat greedyness soms wel erg vervelend kan zijn ;)

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 07-09 20:55

dmnq

zonder klinkers

Topicstarter
thnx dit ga ik eens ff proberen....ben blij dat mensen de moeite nemen om zoiets te beantwoorden :)

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ik had hetzelfde probleem met de regex library van Oracle.
Deze kent ook geen greediness.
Uiteindelijk ben ik wegens vele van dit soort problemen en tegenvallende performance overgestapt op een (zelfgeschreven) stackbased parser.
Deze bleek 10x sneller te zijn dan de regex code.

Who is John Galt?


  • tomato
  • Registratie: November 1999
  • Niet online
justmental: overgestapt op een (zelfgeschreven) stackbased parser.
Deze bleek 10x sneller te zijn dan de regex code.
Dat is natuurlijk ook nog een oplossing :)

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 07-09 20:55

dmnq

zonder klinkers

Topicstarter
code:
1
regEx.Pattern = \\[b\](([^\\[]|\\[[^b])*)\\[/b\]

doet ut niet

het is misschien wel een goed idee om zelf zo'n parser te schrijven

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


  • tomato
  • Registratie: November 1999
  • Niet online
dmnq:
code:
1
regEx.Pattern = \\[b\](([^\\[]|\\[[^b])*)\\[/b\]

doet ut niet
'doet ut niet' zegt niet zoveel...

Misschien is het een idee om er quotes omheen te zetten?

Dit werkt bij mij trouwens heel aardig:
code:
1
2
>perl -w -e "$s = '[b]hoi[/b] mai [b]hallo[/b]'; $s =~
s/\\[b\](([^\\[]|\\[[^b])*)\\[\/b\]/bold/g; print $s"


code:
1
bold mai bold

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op dinsdag 26 maart 2002 23:07 schreef dmnq het volgende:
het is misschien wel een goed idee om zelf zo'n parser te schrijven
ACM heeft toevallig net de code van z'n stackbased parser openbaar gemaakt:
[topic=445817]

Who is John Galt?

Pagina: 1