[php] bbcode regex probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Ik heb een erg vervelend probleem. Ik heb na een aantal voorbeelden te hebben bekeken, bbcode in mijn huidige project gebouwd. Deze werkt in principe naar behoren, op een klein dingetje na. De list. De list wordt geopend door een [ list] tag, eventueel met argument voor nummering of lettering. Dit werkt prima. De items in de list zelf werken echter niet mee.

Ik gebruik onderstaand patroon:
code:
1
2
3
4
// Patroon:
#\\[\*\]\s*(.*?)#
// Vervanging
<li>\1</li>
Als de pagina wordt geparsed, worden de list items wel allemaal netjes afgewerkt. Alle [ *] items worden vervangen door <li>. Helaas worden ze ook direct weer afgesloten, en daarna komt pas de bijbehorende tekst (<li></li> Blaat here). Dit heeft weer tot gevolg dat je een extra regel gebruikt, en de nummering staat boven de tekst. Niet erg handig.
Nou zou je zeggen, laat die sluitende tag dan weg. Dan werkt het toch? Ja klopt, maar ik ben een validatie-nazi, en wil mn broncode gewoon netjes hebben.
Ik ben zelf niet goed thuis in de regex patronen, maar als ik me niet vergis moet deze het toch gewoon doen (dat is tenminste de bedoeling). Maak ik een fout in dit patroon? Zo ja, hoe moet het dan wel ;).

Alvast bedankt.

[ Voor 6% gewijzigd door MueR op 15-06-2005 01:04 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kun je misschien even je precieze preg_replace-regel laten zien? Voor zover ik zo zie is deze regex gewoon in orde voor wat jij wil bereiken. :)

'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.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Hij zit in een array enzo, dat zal ik hier allemaal niet neermikken.
PHP:
1
preg_replace('#\\[\*\]\s*(.*?)#', '<li>\1</li>', $text);
$text is hier uiteraard mn lapje gebrabbel.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Probeer het eens met \\1 in plaats van met \1. :)

'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.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Dat doet het hem helaas niet :)

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

PHP:
1
preg_replace('#\\[\*\]\s*(.*?)#', '<li>\1<\/li>', $text);


Wellicht?


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Had al zo'n vermoeden, maar het was het proberen waard. Het zou wel een \\1 moeten zijn AFAIK, maar goed. :P

Misschien als je het regeleindeteken ($ dus) er ook in verwerkt? Wederom een wilde gok, maar ik ben dan ook niet zo'n regexp-genie als crisp. :P

Edit: Zoefff, de tweede parameter van preg_replace is geen regexp en dus hoeft er niet zoveel escaped te worden. Sowieso hoeft een / nooit escaped te zijn. :)

[ Voor 25% gewijzigd door NMe op 15-06-2005 01:32 ]

'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.


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

Hm oke, dat er niet zo veel escaped hoeft te worden snap ik. Maar hoeft een / nooit escaped te zijn?

Waarom gebeurt dat in dit voorbeeld uit de php manual dan wel (of begrijp ik dat verkeerd?)
PHP:
1
2
3
// get last two segments of host name
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zoefff schreef op woensdag 15 juni 2005 @ 01:38:
Hm oke, dat er niet zo veel escaped hoeft te worden snap ik. Maar hoeft een / nooit escaped te zijn?

Waarom gebeurt dat in dit voorbeeld uit de php manual dan wel (of begrijp ik dat verkeerd?)
PHP:
1
2
3
// get last two segments of host name
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";
offtopic:
Omdat er daar twee /'s om de regexp zelf heen staan. ;) Als ze een # als delimeter hadden gebruikt, dan hadden ze die / niet hoeven escapen. :)

'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.


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

offtopic:
Hmm oke, duidelijk. Dankje :)


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Die '?' in dat patroon zet 'm op "not greedy" voor het list item; tja, dan pakt die '.' dus zo min mogelijk en voor een '*' is dat 0x :(

Je bedoelt inderdaad ook '\\1', voor zover ik weet.

[ Voor 39% gewijzigd door Gwaihir op 15-06-2005 04:11 ]


Acties:
  • 0 Henk 'm!

  • semicolon
  • Registratie: Mei 2004
  • Niet online
\\1 werkt volgens mij niet als je single quotes gebruikt.
Heb in ieder geval zelf met zoiets ook eens problemen gehad..

-edit
Oke was het dus niet, maar hij lijkt het wel te doen als je de ? weghaalt.

[ Voor 63% gewijzigd door semicolon op 15-06-2005 07:29 ]

:D/-<


Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Birdie schreef op woensdag 15 juni 2005 @ 03:53:
Die '?' in dat patroon zet 'm op "not greedy" voor het list item; tja, dan pakt die '.' dus zo min mogelijk en voor een '*' is dat 0x :(
Hier zit je probleem :)

Waar wil je dat je list item eindigd? Eindigd je list-item aan het eind van de regel waar die opstaat? Zo ja kan je deze regex gebruiken:
PHP:
1
2
3
<?php
preg_replace('#\\[\*\]\s*(.*?)$#m', '<li>\1</li>', $text);
?>

Zo matched ie op 'anything to end-of-line' ;)

[ Voor 33% gewijzigd door Huppie op 15-06-2005 08:25 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • b19a
  • Registratie: September 2002
  • Niet online
Invision Power Board (1.3) gebruikt het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    function jouwfunctie() {
        while( preg_match( "#\n?\\[list\](.+?)\\[/list\]\n?#ies" , $txt ) )
        {
            $txt = preg_replace( "#\n?\\[list\](.+?)\\[/list\]\n?#ies", "\$this->regex_list('\\1')" , $txt );
        }
                
        while( preg_match( "#\n?\[list=(a|A|i|I|1)\](.+?)\\[/list\]\n?#ies" , $txt ) )
        {
            $txt = preg_replace( "#\n?\[list=(a|A|i|I|1)\](.+?)\\[/list\]\n?#ies", "\$this->regex_list('\\2','\\1')" , $txt );
        }
    }

    /**************************************************/
    // regex_list: List generation
    // 
    /**************************************************/
    
    function regex_list( $txt="", $type="" )
    {
        if ($txt == "")
        {
            return;
        }
        
        //$txt = str_replace( "\n", "", str_replace( "\r\n", "\n", $txt ) );
        
        if ( $type == "" )
        {
            // Unordered list.
            
            return "<ul>".$this->regex_list_item($txt)."</ul>";
        }
        else
        {
            return "<ol type='$type'>".$this->regex_list_item($txt)."</ol>";
        }
    }
    
    function regex_list_item($txt)
    {
        $txt = preg_replace( "#\\[\*\]#", "</li><li>" , trim($txt) );
        
        $txt = preg_replace( "#^</?li>#"  , "", $txt );
        
        return str_replace( "\n</li>", "</li>", $txt."</li>" );
    }

//(c) 2001 - 2003 Invision Power Services
Er is denk ik ook geen nettere manier om • te parsen... Bovenstaande code kun je trouwens lekker nesten, dus list binnen list :).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
Lekker handig. Maak je een regexp die case insensitive is, ga je nog een keer rekening houden met hoofd- en kleine letters in je regexp zelf: "(a|A|i|I|1)". :X Handig, IPB! d:)b

'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.


Acties:
  • 0 Henk 'm!

  • b19a
  • Registratie: September 2002
  • Niet online
-NMe- schreef op woensdag 15 juni 2005 @ 14:13:
offtopic:
Lekker handig. Maak je een regexp die case insensitive is, ga je nog een keer rekening houden met hoofd- en kleine letters in je regexp zelf: "(a|A|i|I|1)". :X Handig, IPB! d:)b
offtopic:
haha lol; heb ik over het hoofd gezien... dat zou inderdaad makkelijker kunnen :D

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Waar wil je dat je list item eindigd? Eindigd je list-item aan het eind van de regel waar die opstaat?
In een list item moet in principe alles geplaatst kunnen worden. In sommige items zitten weer nieuwe lists, of flinke lappen tekst, verdeeld over een aantal alineas. Mijn list item eindigt dus niet bij een nieuwe regel.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Nieuwe lists daarin.. dan moet je denk ik naar een ander soort oplossing gaan zoeken, met een echte stack, zoals de bbcode parser uit PEAR doet.

Laat je die eis vallen, dan zou je 't kunnen proberen met deze: '#\\[\*\]\s*(.*)(\\[\*\]|\\[/list\])#'

Acties:
  • 0 Henk 'm!

  • webmaster777
  • Registratie: November 2004
  • Laatst online: 26-02 20:05

webmaster777

Argh...

BoukeHaarsma schreef op woensdag 15 juni 2005 @ 17:44:
[...]
offtopic:
haha lol; heb ik over het hoofd gezien... dat zou inderdaad makkelijker kunnen :D
Ja d'oh,
Ze willen weten of je een
a.,b.,c. lijst of
A,B,C lijst of
1,2,3 of
I,II,III of
i,ii,iii enz.
Dus dan is case sensitivity natuurlijk van belang! 8)7

// FIXME: Datasets should be refreshed, but noooo, we gotta use old data


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Birdie schreef op woensdag 15 juni 2005 @ 22:48:
Laat je die eis vallen, dan zou je 't kunnen proberen met deze: '#\\[\*\]\s*(.*)(\\[\*\]|\\[/list\])#'
Hmm.. Bij deze regex vervangt ie alleen de eerste occurance. Verander ik hem naar '#\\[\*\]\s*(.*?)(\\[\*\]|\\[/list\])#', slaat ie er telkens een over.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Pattern:
#\\[\*\]\s*(.*)(\\[\*\]|\\[/list\])#
//Output: 
A. Dit[*]is[*]een[*]list

// Pattern:
#\\[\*\]\s*(.*?)(\\[\*\]|\\[/list\])#
//Output:
A. Dit
   is
B. een
   list

//HTML output laatste pattern:
<ol type="A">
<li>Dit</li>
is
<li>een</li>
test
</ol>

[ Voor 19% gewijzigd door MueR op 16-06-2005 01:00 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
'k Ben ook met deze materie bezig, moest je hierover nog wat info zoeken, hier zijn enkele websites.

Learning to Use Regular Expressions
Regular Expression HOWTO

Misschien kan je dit ook wel gebruiken, ik heb er toch wel hulp voor nodig gehad, maar nu het werk ben ik er zeer blij om.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class inputvalidator
{
  function inputvalidator()
  {
    ....
  }

  /*uitleg : 
  functie die eerst heel je input gaat checken of er geen upper-case zijn
  gemaakt in je BB code en zet deze om naar gewone letter, dit is ergens handig
  als je een edit functie hebt van je newsposts ofzo, zo staan alle tagss in lower-case

  ook wordt [URL]http://www.mijnsite.be[/UrL] omgezet naar in deze vorm
  [url=http://www.mijnwebsite.be]http://www.mijnwebsite.be[/url] of natuurlijk als het
  al in deze vorm staat
  [URL=http://www.mijnwebsite.be]Mijn Website[/Url] wordt dan
  [url=http://www.mijnwebsite.be]Mijn Website[/url]*/

  function print_checkBB($newspost)
  {
    $checkbbpost = null;
    
    $checkbbpost = ereg_replace("\\[[B]\]","[b]",$newspost);
    $checkbbpost = ereg_replace("\\[/[B]\]","[/b]",$checkbbpost);
    $checkbbpost = ereg_replace("\\[[I]\]","[i]",$checkbbpost);
    $checkbbpost = ereg_replace("\\[/[I]\]","[/i]",$checkbbpost);
    $checkbbpost = ereg_replace("\\[[U]\]","[u]",$checkbbpost);
    $checkbbpost = ereg_replace("\\[/[U]\]","[/u]",$checkbbpost);
    $checkbbpost = preg_replace("#\\[(u|U)(r|R)(l|L)(=([^\\[\]]*))?\]([^\\[\]]*)\\[/(u|U)(r|R)(l|L)\]#e", "'[url=' . ('\\4' == '' ? '\\6' : '\\4') . ']\\6[/url]'", $checkbbpost);
    return($checkbbpost);
  }
  
  /*uitleg:
  deze functie zet alle BB code om naar HTML code, ook de url wordt volledig met target="_blank"
  omgezet.  Ik heb geen functie gebruikt htmltobb omdat ik BB-post & HTML-post opsla in m'n
  database, 'k heb hier al eens een discussie over geopend op't forum en ik ben er toen toch van
  overtuigd geweest dat dit toch de beste oplossing was

  ook worden '-enkelquote "-dubbelquotes omgezet naar hun HTML numerieke code, mits ik soms
  ondervind als je dit als gewone tekst laat HTML er soms moeilijk mee kan gaan doen*/

  function print_bbtohtml($newspost)
  {
    $htmlpost = null;
    
    $newline = chr(10); 
    $htmlpost = ereg_replace("\\[[b]\]","<b>",$newspost);
    $htmlpost = ereg_replace("\\[/[b]\]","</b>",$htmlpost);
    $htmlpost = ereg_replace("\\[[i]\]","<i>",$htmlpost);
    $htmlpost = ereg_replace("\\[/[i]\]","</i>",$htmlpost);
    $htmlpost = ereg_replace("\\[[u]\]","<u>",$htmlpost);
    $htmlpost = ereg_replace("\\[/[u]\]","</u>",$htmlpost);
    $htmlpost = ereg_replace("'","'",$htmlpost);
    $htmlpost = ereg_replace("\"","&#34",$htmlpost); 
    $htmlpost = ereg_replace($newline,"<br />",$htmlpost);
    $htmlpost = preg_replace("#\\[url(=([^\\[\]]*))?\]([^\\[\]]*)\\[/(url)\]#e", "'<a href=\"' . ('\\2' == '' ? '\\3' : '\\2') . '\" target=\"_blank\">\\3</a>'", $htmlpost);
    return($htmlpost);
  }

}


Ik hoop dat je er wat mee bent. Als jij nog dingen hebt om BB code naar HTML te zetten, misschien zou het leuk zijn om wat dingen uit te wisselen, zo moet je niet altijd je krom gaan zitten zoeken naar de juiste code :)

Wat jou probleem betreft, 'k weet niet zo direct een oplossing, want het is niet bepaald simpel. Want je zit natuurlijk met het probleem dat je niet weet "hoeveel" keren hij [ * ] in z'n list tagg gebruikt. 'k Hoop dat de oplossing gevonden wordt, 'k zou deze regex ook wel kunnen gebruiken :).

[ Voor 86% gewijzigd door imp4ct op 16-06-2005 01:42 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Je bovenstaande code is leuk impact, maar niet erg netjes. Stel nou dat ik een extreem dom iemand ben (veronderstelling), en ik vergeet een [ b] tag af te sluiten met [/b]. Dat wordt niet gecontroleerd, wat weer lijdt tot het tonen van de rest van je site in bold. Hiervoor kan je beter een patroon pakken dat controleerd of de tag ook wordt afgesloten.
PHP:
1
2
3
$search = '#\[b](.*?)\\[/b\]#';
$replace = '<b>\1</b>';
preg_replace($search,$replace,$text);

[ Voor 27% gewijzigd door MueR op 16-06-2005 01:38 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
MueR schreef op donderdag 16 juni 2005 @ 01:35:
Je bovenstaande code is leuk impact, maar niet erg netjes. Stel nou dat ik een extreem dom iemand ben (veronderstelling), en ik vergeet een [ b] tag af te sluiten met [/b]. Dat wordt niet gecontroleerd, wat weer lijdt tot het tonen van de rest van je site in bold. Hiervoor kan je beter een patroon pakken dat controleerd of de tag ook wordt afgesloten.
PHP:
1
2
3
$search = '#\[b](.*?)\\[/b\]#';
$replace = '<b>\1</b>';
preg_replace($search,$replace,$text);
Nog niet bij nagedacht eerlijk gezegd, thx for the tip !! _/-\o_
Wat me wel opvalt is dat jij blijf \1 gebruiken, waar ik dus altijd \\ gebruik. Bij mij geeft dit dus geen problemen.

[ Voor 12% gewijzigd door imp4ct op 16-06-2005 01:41 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

  • b19a
  • Registratie: September 2002
  • Niet online
I_M_P_A_C_T schreef op donderdag 16 juni 2005 @ 01:39:
[...]
Nog niet bij nagedacht eerlijk gezegd, thx for the tip !! _/-\o_
Wat me wel opvalt is dat jij blijf \1 gebruiken, waar ik dus altijd \\ gebruik. Bij mij geeft dit dus geen problemen.
PHP:
1
2
$dubbel="\\1";
$enkel='\1';
In de eerste versie escape je de \, omdat anders \1 wordt geparsed als teken (willen we niet). We willen juist \1 als string, zoals dus bij de tweede makkelijker is te zien.

terug naar topic:
Wat is er op tegen om "mijn" code te gebruiken?

Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
MueR schreef op donderdag 16 juni 2005 @ 01:35:
Je bovenstaande code is leuk impact, maar niet erg netjes. Stel nou dat ik een extreem dom iemand ben (veronderstelling), en ik vergeet een [ b] tag af te sluiten met [/b]. Dat wordt niet gecontroleerd, wat weer lijdt tot het tonen van de rest van je site in bold. Hiervoor kan je beter een patroon pakken dat controleerd of de tag ook wordt afgesloten.
PHP:
1
2
3
$search = '#\[b](.*?)\\[/b\]#';
$replace = '<b>\1</b>';
preg_replace($search,$replace,$text);
PS : heb je misschien nog goeie "info" sites om regex nog beter te leren, zoals je ziet heb 'k het zeker nog niet helemaal onder de knie, wil zeker bijleren, maar t'is soms allemaal zo moeilijk uitgelegd.

[ Voor 33% gewijzigd door imp4ct op 16-06-2005 02:20 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
Ondertussen heb ik maar een smerige methode gebruikt. Suggesties ter verbetering zijn uiteraard welkom.
PHP:
1
2
3
4
5
6
$search = '#\\[\*\]\s*(.*?)#';
$replace = '</li><li>\\1';
$text = preg_replace($search, $replace, $text);

$text = preg_replace('#<ol type="(.*?)" class="list"></li>#','<ol type="\\1" class="list">',$text);
$text = str_replace('</ol>',"</li></ol>",$text);

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
I_M_P_A_C_T schreef op donderdag 16 juni 2005 @ 02:02:
Is het ook mogelijk van zoals hier op't forum wordt toegepast, wanneer een tag niet gesloten wordt, dan wordt er [b] gewoon geschreven in plaats van de HTML code en zo ja, want ik denk wel dat dat mogelijk is hoe doe je dit dan ??
Met het pattern dat ik liet zien wordt [b] alleen geparsed wanneer deze ook afgesloten wordt. Zonder [ /b] wordt er dus gewoon [b] op je scherm getoverd.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • b19a
  • Registratie: September 2002
  • Niet online
I_M_P_A_C_T schreef op donderdag 16 juni 2005 @ 02:02:
[...]


PS : heb je misschien nog goeie "info" sites om regex nog beter te leren, zoals je ziet heb 'k het zeker nog niet helemaal onder de knie, wil zeker bijleren, maar t'is soms allemaal zo moeilijk uitgelegd.
link

Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
MueR schreef op donderdag 16 juni 2005 @ 02:16:
[...]
Met het pattern dat ik liet zien wordt [b] alleen geparsed wanneer deze ook afgesloten wordt. Zonder [ /b] wordt er dus gewoon [b] op je scherm getoverd.
Jah, merk het nu ook, zat een fout in m'n scriptje wa'k ff had aangepast.
Ok, enorm domme vraag van mij dus 8)7 |:( :X
thx !!

[ Voor 23% gewijzigd door imp4ct op 16-06-2005 02:23 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

  • b19a
  • Registratie: September 2002
  • Niet online
MueR schreef op donderdag 16 juni 2005 @ 02:14:
Ondertussen heb ik maar een smerige methode gebruikt. Suggesties ter verbetering zijn uiteraard welkom.
PHP:
1
2
3
4
5
6
$search = '#\\[\*\]\s*(.*?)#';
$replace = '</li><li>\\1';
$text = preg_replace($search, $replace, $text);

$text = preg_replace('#<ol([^>]*?)></li>#','<ol\\1>',$text);
$text = str_replace('</ol>',"</li></ol>",$text);
Anders zou je vervelende acties krijgen dat je (.*?) teveel gaat opslurpen wanneer de <ol de class="list" mist.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Topicstarter
die class wordt automatisch toegekend aan alle [ list] tags :)

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
offtopic:
'k Weet niet of iemand dit programmaatje misschien gebruikt, maar het lijkt mij een verdomd handig dingetje, je kan er wel geen free evaluation download van krijgen, maar ik denk dat ik het mij misschien toch ga aanschaffen.

RegexBuddy

Moest er iemand hier ervaring mee hebben, misschien wat info ofzo.

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom gebruik je de Regulator niet?
Gratis en goed, gekoppeld aan www.RegExLib.com

Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
'k Heb nog wat liggen prullen om de regex nog beter te begrijpen en't lukt nu toch al wat beter. 'k Heb een nieuwe telg toegevoegd bij m'n UBB code.

Checks:
  • enkel left - right - bottom is mogelijk
  • bij width & height zijn enkel cijfers mogelijk
  • de image extentie MOET gif - jpg - png andere extenties worden niet aanvaard
  • bij de image-url en alt-omschrijving wordt er gecontroleerd op speciale karakters
Ik weet dat hij lower-case sensetive is, maar hier heb'k zelf nog een oplossing voor gevonden, 't lukte niet echt goed alles ineens lower & uppercase check waardig te maken met regex :), dus dit even weggelaten dus en andere oplossing gezocht.
voorbeeld van een invoer.
code:
1
2
3
input : [img=left,mypicture.gif,150,200,Maarten]

output : [img]"http://www.mywebsite.com/images/news/images/mypicture.gif"[/img]


De reden waarom ik dit gebruik is omdat ik images wil toevoegen in mijn newspost, nu dit moet zowel links - rechts - als beneden kunnen, zo'n beetje gelijk hier op Tweakers.net wordt toegepast.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
class input_validator
{
  function input_validator()
  {
    ....
  }

  function print_bbtohtml($newspost)
  {
    $htmlpost = null;
    
    ...
 
    $htmlpost = preg_replace("#\\[img=((left)|(right)),([a-zA-Z0-9_ .-]+)((\.gif)|(\.jpg)|(\.png)),([0-9]*),([0-9]*),([a-zA-Z0-9 _.-]*)\]#",'[img]"http://www.mywebsite.com/images/news/images/\\4\\5"[/img]',$htmlpost);
    $htmlpost = preg_replace("#\\[img=(bottom),([a-zA-Z0-9_ .-]+)((\.gif)|(\.jpg)|(\.png)),([0-9]*),([0-9]*),([a-zA-Z0-9 _.-]*)\]#",'<center>[img]"http://www.mywebsite.com/images/news/images/\\2\\3"[/img]</center>',$htmlpost);
  }
}
?>

Moest er iemand interesse hebben in de CSS
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.leftpostimg {
 background-color: #F9F9F9;
 float: left;
 margin-right: 8px;
 margin-top: 10px;
 margin-bottom: 3px;
}

.rightpostimg {
 background-color: #F9F9F9;
 float: right;
 margin-left: 8px;
 margin-top: 10px;
 margin-bottom: 3px;
}

.bottompostimg {
 background-color: #F9F9F9;
 float: center;
 margin-top: 10px;
 margin-bottom: 10px;
}
vrij simpel allemaal denk ik voor pro-coders onder ons, maar 'k ben toch een beetje trots da'k het toch gevonden heb :). Waar ik wel nog voor een oplossing aan't zoeken ben is om alles in 1 regel te krijgen. Nu moet ik nog "bottom" apart nemen omdat bij deze HTML code de <img> tagg moet omgeven worden door een <center> tagg. En natuurlijk, als iemand de code beter zou kunnen schrijven of me tips geven, feel free to let me know !

Sorry als'k misschien off-topic ga, maar ik denk dat dit topic wel erg geschikt is om met je regex problemen te komen en ook je "uitvindingen eh" :)

[ Voor 100% gewijzigd door imp4ct op 17-06-2005 12:01 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600

Pagina: 1