Pagina 1 van 1

[regex] twee dezelfde waardes

BerichtGeplaatst: 01 nov 2008 19:16
door libia
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?

Re: [regex] twee dezelfde waardes

BerichtGeplaatst: 02 nov 2008 10:01
door Stefan
Je bent me net voor libia,

Ik zit namelijk met hetzelfde probleem alleen dan voor

Code: Selecteer alles
[quote=][quote=][/quote][/quote]

Re: [regex] twee dezelfde waardes

BerichtGeplaatst: 02 nov 2008 14:40
door libia
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!

Re: [regex] twee dezelfde waardes

BerichtGeplaatst: 02 nov 2008 14:48
door Johan
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

Re: [regex] twee dezelfde waardes

BerichtGeplaatst: 02 nov 2008 14:50
door libia
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:

[OPGELOST] [regex] twee dezelfde waardes

BerichtGeplaatst: 02 nov 2008 15:41
door libia
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);
            }
        }
?>