Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)
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.
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
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)
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.
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
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???
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)
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:
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':
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
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
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)
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.
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?
Dat is natuurlijk ook nog een oplossingjustmental: overgestapt op een (zelfgeschreven) stackbased parser.
Deze bleek 10x sneller te zijn dan de regex code.
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)
'doet ut niet' zegt niet zoveel...dmnq:
code:
1 regEx.Pattern = \\[b\](([^\\[]|\\[[^b])*)\\[/b\]
doet ut niet
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 |
ACM heeft toevallig net de code van z'n stackbased parser openbaar gemaakt: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
[topic=445817]
Who is John Galt?
Pagina: 1