aan alle goede dingen komt een eind, webmasterplein.net 2003 - 2013
wij danken jullie voor al mooie momenten die dankzij dit forum ontstonden - Derk, Rutger en Stef

[regex] twee dezelfde waardes

Je komt er niet helemaal uit bij het scripten? Übergoede functie geschreven? Alles met betrekking tot scripting, kun je hier terecht.

[regex] twee dezelfde waardes

Berichtdoor libia » 01 nov 2008 19:16

stel ik heb dit:
Code: Selecteer alles
[ignore][ignore][/ignore][/ignore]

[ignore][b]lol[/b][/ignore]


dan moet ik dus steeds zorgen dat ik in m'n regex de twee buitenste selecteer..
wat wel is geluk:
-de eerste [ignore] en de aller laatste [/ignore]
-de eerste [ignore] en de eerste [/ignore]

nu heb ik dus een code geschreven die er dit van maakt:
Code: Selecteer alles
[ignore:1][ignore:2][/ignore:2][/ignore:1]

[ignore:1][b]lol[/b][/ignore:1]


alleen: hoe maak ik een regex die dan steeds paartjes selecteerd waarbij het getal achter de dubbele punt hetzelfde is?
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [regex] twee dezelfde waardes

Berichtdoor Stefan » 02 nov 2008 10:01

Je bent me net voor libia,

Ik zit namelijk met hetzelfde probleem alleen dan voor

Code: Selecteer alles
[quote=][quote=][/quote][/quote]
Opzoek naar een webdesigner? http://webtilize.net/
Avatar gebruiker
Stefan
wmpr
 
Berichten: 406
Geregistreerd: 27 dec 2007 14:08
Woonplaats: Ter Aar

Re: [regex] twee dezelfde waardes

Berichtdoor libia » 02 nov 2008 14:40

oke.. ik heb nu dit om die cijfertjes toe te voegen:

Code: Selecteer alles
<?php
        $max_count 
= 0;
        $count = 0;
        
        if
(preg_match_all("#(\[/?ignore\])#i", $in, $matches))
        {
            foreach($matches[1] as $match)
            {
                echo substr($match, 1, 1);
                if(substr($match, 1, 1) == '/')
                {
                    echo '(' . $count . ')';
                    //een end-tag
                    if(!preg_replace("#\[/ignore\]#is", "[/ignore:" . $count . "]", $in, 1))
                        echo '<br />geen nummer toegevoegd<br />';
                    $count--;
                }
                else
                
{
                    //een start-tag
                    $count++;
                    echo '(' . $count . ')';
                    $max_count = ($count > $max_count) ? $count : $max_count;
                    if(!preg_replace("#\[ignore\]#is", "[ignore:" . $count . "]", $in, 1))
                        echo '<br />geen nummer toegevoegd<br />';
                }
                echo ' - ';
            }
            echo $in . ' &nbsp; ' . $max_count;

            //i(1) - i(2) - /(2) - /(1) - i(1) - /(1) - [ignore]ignore [ignore][/ignore][/ignore] [hide]hide [ignore][hide][/hide][/ignore]  2 
        }
?>


wat er geechood wordt, dat heb ik ff in een comment erbij gezet.. maar hij ziet het dus wel goed, maar de cijfertjes worden niet toegevoegd!
Laatst bijgewerkt door libia op 02 nov 2008 14:51, in totaal 3 keer bewerkt.
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [regex] twee dezelfde waardes

Berichtdoor Johan » 02 nov 2008 14:48

Code: Selecteer alles
<?php
$max_count 
0;
$count 0;

if(
preg_match_all("#(\[/?ignore\])#i"$in$matches))
{
foreach(
$matches[1] as $match)
{
echo 
substr($match11);
if(
substr($match11) == '/')
{
echo 
'(' $count ')';
//een end-tag
if(!preg_replace("#\[/ignore\]#is""[/ignore:" $count "]"$in1))
echo 
'<br />geen nummer toegevoegd<br />';
$count--;
}
else
{
//een start-tag
$count++;
echo 
'(' $count ')';
$max_count = ($count $max_count) ? $count $max_count;
if(!
preg_replace("#\[ignore\]#is""[ignore:" $count "]"$in1))
echo 
'<br />geen nummer toegevoegd<br />';
}
echo 
' - ';
}
echo 
$in ' &nbsp; ' $max_count;

//i(1) - i(2) - /(2) - /(1) - i(1) - /(1) - [ignore]ignore [ignore][/ignore][/ignore] [hide]hide [ignore][hide][/hide][/ignore] 2
}
?>

Even neergezet omdat de code in bovenstaande post niet werkt. :D
Avatar gebruiker
Johan
wmpr
 
Berichten: 676
Geregistreerd: 07 jan 2008 15:42

Re: [regex] twee dezelfde waardes

Berichtdoor libia » 02 nov 2008 14:50

Johan schreef:...
Even neergezet omdat de code in bovenstaande post niet werkt. :D

dank je :P ik heb het al veranderd :)

ik heb nu ook een count toegevoegd in de preg_replace's
Code: Selecteer alles
<?php
        $max_count 
= 0;
        $count = 0;
        
        if
(preg_match_all("#(\[/?ignore\])#i", $in, $matches))
        {
            foreach($matches[1] as $match)
            {
                echo substr($match, 1, 1);
                if(substr($match, 1, 1) == '/')
                {
                    echo '(' . $count . ')';
                    //een end-tag
                    if(!preg_replace("#\[/ignore\]#is", "[/ignore:" . $count . "]", $in, 1, $num))
                        echo '<br />geen nummer toegevoegd<br />';
                    $count--;
                }
                else
                
{
                    //een start-tag
                    $count++;
                    echo '(' . $count . ')';
                    $max_count = ($count > $max_count) ? $count : $max_count;
                    if(!preg_replace("#\[ignore\]#is", "[ignore:" . $count . "]", $in, 1, $num))
                        echo '<br />geen nummer toegevoegd<br />';
                }
                echo ' [' . $num . '] - ';
            }
            echo $in . ' &nbsp; ' . $max_count;

            //i(1) [1] - i(2) [1] - /(2) [1] - /(1) [1] - i(1) [1] - /(1) [1] - [ignore]ignore [ignore][/ignore][/ignore] [hide]hide [ignore][hide][/hide][/ignore]   2 
        }
?>


edit er was nu twee keer count :oops:
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

[OPGELOST] [regex] twee dezelfde waardes

Berichtdoor libia » 02 nov 2008 15:41

ok ik heb het opgelost, hier de code om de cijfertjes er achter te zetten en om ze daarna goed weg te werken :)

Code: Selecteer alles
<?php
        $max_count 
0;
        
$count 0;
        
        if(
preg_match_all("#(\[/?ignore\])#i"$in$matches))
        {
            foreach(
$matches[1] as $match)
            {
                if(
substr($match11) == '/')
                {
                    
//een end-tag
                    
$in preg_replace("#\[/ignore\]#is""[/ignore:" $count "]"$in1);
                    
$count--;
                }
                else
                {
                    
//een start-tag
                    
$count++;
                    
$max_count = ($count $max_count) ? $count $max_count;
                    
$in preg_replace("#\[ignore\]#is""[ignore:" $count "]"$in1);
                }
            }
        }

        if(
preg_match_all("#\[ignore:([0-9]+)\](.*?)\[/ignore:\\1\]#is"$in$matches))
        {
            foreach(
$matches[2] as $i => $match)
            {
                
$num $matches[1][$i];

                
$match preg_replace("#\[(/?)ignore:[0-9]+\]#is""[$1ignore]"$match);
                
$match preg_replace("#\[(/?.*?)\]#is""&#91;$1&#93"$match);
                
                
$in preg_replace("#\[ignore:" $num "\](.*?)\[/ignore:" $num "\]#is""[ignore:" $this->bbcode_uid "]" $match "[/ignore:" $this->bbcode_uid "]"$in1);
            }
        }
?>
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!


Keer terug naar PHP, ASP, SQL



cron