[ASP] Regular Expressions

Pagina: 1
Acties:

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik ben een ubb parsertje in elkaar aan het flansen maar deze regular expressions willen om de een of andere reden niet werken... Iemand Een idee dit is de foutmelding:

Error Type:
Runtimefout Microsoft VBScript (0x800A1399)
Syntaxisfout in reguliere expressie
/Nieuws/NieuwsToegevoegd.asp, line 7 (gelijk aan de lijn in de code hier :))


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim RegExpr

Set RegExpr = New RegExp
RegExpr.Pattern = "/\[url]\(.+?)\](.+?)\\[\/url\]/is"
RegExpr.Global = True
RegExpr.IgnoreCase = True
NieuwsBericht = RegExpr.Replace(NieuwsBericht,"<a href='\3'></a>")

Set RegExpr = New RegExp
RegExpr.Pattern = "/\[url=\(.+?)\](.+?)\\[\/url\]/is"
RegExpr.Global = True
RegExpr.IgnoreCase = True
NieuwsBericht = RegExpr.Replace(NieuwsBericht,"<a href='\3'>\4</a>")

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Waarom gebruik je de PCRE syntax? Waarom escape je letterlijke tekens als [ en ] niet, maar tekens als ( die je niet letterlijk wil hebben wel? Kijk eens naar mijn versie, en lees de RegExp FAQ eens goed door.

ASP.NET Visual Basic:
1
2
    objRegExp.Pattern = "\\[url\](((news|(ht|f)tp(s?))\://){1}.*?)\\[/url\]"
    s = objRegExp.Replace(s, "<a href=""$1"" target=""_blank"">$1</a>")


Succes.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Heeft er iemand een nederlands Tutorial of FAQ voor regular expressions?

En dan nog iets NMe84. Hij kijkt nu of er iets in de zin van Ftp Http shttp oid voor staat. Maar met alleen www.bl44t.nl doet hij het toch niet? Dat moet dus niet 3)
Hij moet dom zijn en niet slim kijken ik zal ff kijken of ik erzelf uitkom maar reg expressions blijf ik erg ingewikkeld vinden...

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

Mischa_NL schreef op 13 mei 2004 @ 13:36:
Heeft er iemand een nederlands Tutorial of FAQ voor regular expressions?
Ja, zie de P&W FAQ.

[ Voor 45% gewijzigd door GX op 13-05-2004 13:38 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Mischa_NL schreef op 13 mei 2004 @ 13:36:
En dan nog iets NMe84. Hij kijkt nu of er iets in de zin van Ftp Http shttp oid voor staat. Maar met alleen www.bl44t.nl doet hij het toch niet? Dat moet dus niet
Daarom heb ik daar een tweede regexp voor. :P

ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  Public Function FormatStr(s)
    Dim objRegExp
    
    Set objRegExp = New RegExp
    objRegExp.Global = True
    objRegExp.IgnoreCase = True
    
    objRegExp.Pattern = "\\[url\](((news|(ht|f)tp(s?))\://){1}.*?)\\[/url\]"
    s = objRegExp.Replace(s, "<a href=""$1"" target=""_blank"">$1</a>")

    objRegExp.Pattern = "\\[url\]www.(.*?)\\[/url\]"
    s = objRegExp.Replace(s, "<a href=""http://www.$1"" target=""_blank"">www.$1</a>")

    FormatStr = s
    
    Set objRegExp = nothing
  End Function

Er staan natuurlijk nog meer tags in mijn functie maar je snapt het idee wel. Je kan ook gewoon mijn 2e regexp gebruiken om een andere op te baseren, maar de combinatie van mijn 2 expressies is veiliger dan deze:
code:
1
\\[url\](.*?)\\[/url\]

De reden dat de mijne veiliger zijn is dat bij de laatstgenoemde iets als [url]javascript:alert('blaat');[/url] ook werkt. M.a.w. je kan javascripts uitvoeren... ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik snap het idee alleen snap ik nog niet helemaal hoe het werkt, met die FAQ zal ik al wel verder komen.
allemaal bedankt :)

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
kan iemand me toch nog heel ff helpen?
Het lukt nu aardig maar hetgeen met {1} {2} enz snap ik niet helemaal. hier de regel coding:

code:
1
2
3
'EigenTekst Met HTTP'
RegExpr.Pattern = "\\[url\=(((news|(ht|f)tp(s?))\://){1}.*?)]({2}.*?)\\[/url\]"
NieuwsBericht = RegExpr.Replace(NieuwsBericht,"<a href=""$1"">$2</a>")


Het gaat om het stukje:

({2}.*?)

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Niemand?

Modbreak:
Doe eens niet kicken binnen 24 uur? :/ Verder kan je Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif gebruiken, zodat je geen 3 berichten onder elkaar hoeft te zetten. :)

[ Voor 138% gewijzigd door gorgi_19 op 13-05-2004 16:24 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Die {1} heeft helemaal nix met $1 te maken. {1} wil zeggen dat het voorgaande precies één keer voor moet komen, anders matcht ie niet. Die {2} wil dus zeggen dat het voorgaande precies twee keer voor moet komen. Maar er is geen voorgaande, je gebruikt namelijk daarvoor een haakje. Ik vermoed dat je dit wil:

ASP:
1
2
3
'EigenTekst Met HTTP'
RegExpr.Pattern = "\\[url\=(((news|(ht|f)tp(s?))\://){1}.*?)](.*?)\\[/url\]"
NieuwsBericht = RegExpr.Replace(NieuwsBericht,"<a href=""$1"">$6</a>")
Niemand?
Wat je hier doet heet kicken, en dat mag pas na 24 uur. Niet iedereen is de hele tijd hier op GoT aanwezig, dus geef de mensen de tijd om je vraag te lezen. Misschien kun je beter de stickies even lezen.

[ Voor 25% gewijzigd door NMe op 13-05-2004 15:06 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
sorry het spijt me ik zal het ff doen...

forgive me O-)

/Edit Het is btw gelukt! Ik snapte niet wanneer je nu $1 of $2 moest gebruiken maar je moet gewoon de ( haakjes tellen :) tnx nu vat ik hem echt ;)

[ Voor 57% gewijzigd door Mischa_NL op 13-05-2004 15:18 ]


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Nog een vraag.

Als ik hem ge parsed heb naar ubb dan wil ik hem bij het veranderen van een nieuwsbericht uiteraard weer om laten keren :)

nu is dat heel leuk maar met de url werkt dat niet aangezien die hetzelfde pattern hebben.

Nu wil ik met een if-then-else statement kijken of het zichtbare stuk van de url (tussen "> en </a>) gelijk is aan het niet zichtbare stuk (<A href="url">) Maar hoe moet ik dat doen? op de manier hieronder werkt het niet... Er moet namelijk iets met Regexpr voor, maar ik heb geen idee wat!

Hier het stukje code!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
''  Url Tag  ''

'Url'
RegExpr.Pattern = "<a href=""(.*)"">(.*?)</a>"

If Not "$2" = "$1" then 
'Eigentekst'
Bericht = RegExpr.Replace(Bericht,"[url=$1]$2[/url]")

Elseif "$2" = "$1" then 
'Url'
Bericht = RegExpr.Replace(Bericht, "[Url]$1[/Url]")

End if

[ Voor 32% gewijzigd door Mischa_NL op 13-05-2004 18:50 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Mischa_NL schreef op 13 mei 2004 @ 18:49:
Nog een vraag.

Als ik hem ge parsed heb naar ubb dan wil ik hem bij het veranderen van een nieuwsbericht uiteraard weer om laten keren :)

nu is dat heel leuk maar met de url werkt dat niet aangezien die hetzelfde pattern hebben.

Nu wil ik met een if-then-else statement kijken of het zichtbare stuk van de url (tussen "> en </a>) gelijk is aan het niet zichtbare stuk (<A href="url">) Maar hoe moet ik dat doen? op de manier hieronder werkt het niet... Er moet namelijk iets met Regexpr voor, maar ik heb geen idee wat!

Hier het stukje code!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
''  Url Tag  ''

'Url'
RegExpr.Pattern = "<a href=""(.*)"">(.*?)</a>"

If Not "$2" = "$1" then 
'Eigentekst'
Bericht = RegExpr.Replace(Bericht,"[url=$1]$2[/url]")

Elseif "$2" = "$1" then 
'Url'
Bericht = RegExpr.Replace(Bericht, "[Url]$1[/Url]")

End if
Waarom wil je dat überhaupt doen? Sla je gewoon HTML op in de database? Niet doen! Gewoon als UBB code in de database opslaan werkt veel fijner, juist omdat editen dan makkelijker gaat. Je kunt je UBB code ook gewoon parsen op het moment dat je hem nodig hebt (als je het weer gaat geven dus).

Edit: Als je het op jouw manier wil doen zul je moeten alle tekst tussen a href=" en </a> moeten matchen, daar dan "> tussenuit halen, en dan de twee losse stukjes apart vergelijken met elkaar. Best wel behoorlijk zinloos als je bedenkt dat het veel makkelijker kan.

[ Voor 19% gewijzigd door NMe op 13-05-2004 19:23 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Maar het is toch makkelijker om in de D-base Html te zetten zodat hij niet iedere keer als je een bericht bekijkt hij het weer moet parsen.

Nu hoeft hij alleen te parsen op het moment dat je daadwerkelijk iets wilt gaan veranderen in het bericht!

Is dat niet veel sneller?

Je hebt 2 verschillende [url] Codes.

1ste code
code:
1
[url] url [/url]


dit geeft iets in de zin van [url] url [/url]


Dan heb je ook nog de 2e
code:
1
[url=url]bl44t wat je maar wilt[/url]


Dit geeft [url=url]bl44t wat je maar wilt[/url]

Als ik deze wil de-parsen krijg je 2 dezelfde Patronen

Namelijk dit patroon:

code:
1
2
'Url'
RegExpr.Pattern = "<a href=""(.*)"">(.*?)</a>"


Nu wil ik die dus uit elkaar halen met if-then-else maar nu weet ik niet hoe ik $1 en $2 uit de regular expression moet selecteren...

Snap je het zo? :)

[ Voor 13% gewijzigd door Mischa_NL op 13-05-2004 19:38 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Ik snap wat je wil doen maar het is behoorlijk ongebruikelijk. Normaal sla je altijd gewoon UBB in de database op. Het vervangen van 25 berichten van normale lengte gaat nog steeds in minder dan een seconde met ASP, dus waarom zou je het niet realtime doen? Dat scheelt jou onnodige conversies. En trouwens, hoe wil je straks bijvoorbeeld het verschil gaan zien tussen een email en een url? Gebruiken beide de anchor tag van HTML...
Nu wil ik die dus uit elkaar halen met if-then-else maar nu weet ik niet hoe ik $1 en $2 uit de regular expression moet selecteren...
Met zoiets:
code:
1
2
3
objRegExp.Pattern = "blaat(*)"
objRegExp.Execute
matches = objRegExp.Matches

Als ik me niet vergis, ben niet zo thuis in RegExps in ASP namelijk.

[ Voor 28% gewijzigd door NMe op 13-05-2004 19:55 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Door heel simpel te checken of iets een Mail is...

Gewoon met een reg exp kijken of er een Mail patroon in zit. dat lijkt me niet zo moeilijk of wel?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Mischa_NL schreef op 13 mei 2004 @ 19:53:
Door heel simpel te checken of iets een Mail is...

Gewoon met een reg exp kijken of er een Mail patroon in zit. dat lijkt me niet zo moeilijk of wel?
Niet moeilijk maar wel zinloos. Waarom zou je? Je maak het jezelf alleen lastiger. Je kan gewoon veel beter die UBB conversiefunctie verplaatsen naar het deel van het script dat je data weergeeft, dat bespaart ruimte in je database en ook bespaart het overingewikkelde scripts...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ok dan ga ik dat doen! Het was al in me opgekomen maar ik vond het veel werk :)

Dan maak ik gelijk iets dat de oudere NieuwsPosts WEL op deze manier blijven werken of ik vervang ze gewoon even 8)7
Het zijn er maar 70 ofzo :P

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Hehe, je kan HTML natuurlijk gewoon laten parsen ja. Wat je normaal wel wil doen op publieke postaangelegenheden is zorgen dat HTML niet werkt, en dat je geen javascripts kunt uitvoeren. Dat kan trouwens ook met zoiets als de font size tags als je die regexp slecht gemaakt hebt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
code:
1
2
Bericht = replace(Bericht,"<", "&lt;")
Bericht = replace(Bericht,">", "&gt;")


:) of werkt dit niet goed genoeg en moeten er andere dingen bij?
dit staat in mijn parser, dus ze kunnen wel html in de d-base zetten. maar hij laat het niet zien omdat hij er op het moment dat hij het gaat laten zien andere haakjes van maakt.

Kan dit geen kwaad als het alleen in de d-base staat maar nooit word laten zien? of moet ik deze wel gelijk vervangen op het moment dat ze posten?

[ Voor 108% gewijzigd door Mischa_NL op 13-05-2004 20:38 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22:23

NMe

Quia Ego Sic Dico.

Mischa_NL schreef op 13 mei 2004 @ 20:36:
code:
1
2
Bericht = replace(Bericht,"<", "&lt;")
Bericht = replace(Bericht,">", "&gt;")


:) of werkt dit niet goed genoeg en moeten er andere dingen bij?
dit staat in mijn parser, dus ze kunnen wel html in de d-base zetten. maar hij laat het niet zien omdat hij er op het moment dat hij het gaat laten zien andere haakjes van maakt.

Kan dit geen kwaad als het alleen in de d-base staat maar nooit word laten zien? of moet ik deze wel gelijk vervangen op het moment dat ze posten?
Kan geen kwaad om het gewoon als < en > te laten staan, is zelfs beter (scheelt 3 bytes per karakter ;)). Vergeet trouwens niet " te vervangen door & quot; (zonder die spatie). ;)

Maareh, als je op dit moment UBB tags parset VOOR ze in de DB terecht komen, dan kun je natuurlijk niet HTML gaan uitfilteren in dit geval. ;)

Ow, en ik geloof dat er een functie was die alle HTML characters in één keer omzet naar HTML safe gedoe. Weet alleen ff niet hoe die ook alweer heette, daar moet je ff een collegatweaker lief voor aankijken. :)

[ Voor 6% gewijzigd door NMe op 13-05-2004 20:42 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
htmlencode misschien? :) maar ik weet niet ik vertrouw hem niet :+

Btw, het is gelukt en alles werkt nu naar behoren, reacties op nieuwsberichten die gemaakt zijn voordat er ubb in de d-base gezet werd kun je niet meer wijzigen omdat dit een beetje raar zou zijn...

Nu het forum nog 3)
Wat door mij zelf geschreven is :) Alleen een beetje crappy is noog steeds.

Ik denk dat ik alles van het forum wegpleur :) dan hoef ik niet alles om te zetten en word mijn coding niet zo een troep :)...

site staat toch nog niet online :D

Maar om te testen zijn er al flink wat nieuwsberichten, reacties op de Frontpage en Posts en Threads op het Forum! Maargoed het is kiezen of delen... ;)
Pagina: 1