[PHP] ereg_replace | strings | functions

Pagina: 1
Acties:

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Ik heb een probleempje;
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
function parse($str) {
    return ereg_replace("\\[([ ._a-zA-Z0-9-]*)\]",parseValue("\\1"),$str);
}

function parseValue($str) {
    $waarde = "mod";
    if ($str == $waarde) {
        return "<b>'$str' is gelijk aan '$waarde'</b>";
    } else {
        return "<b>'$str' is niet gelijk aan '$waarde'</b>";
    }
}

$waarde = "VOOR [mod] MIDDEN [mod] ACHTER";
echo parse($waarde);
?>

Lever de niet verwachte/gewenste output; namelijk:
VOOR 'mod' is niet gelijk aan 'mod' MIDDEN 'mod' is niet gelijk aan 'mod' ACHTER
Als ik een var_dump maak van de string blijkt dat de waarde die aan parseValue wordt doorgegeven niet "mod" is maar "\1"; een verwijzing naar de waarde die de reguliere expressie teruggaf. Het rare is echter dat die functie bij het returnen wel de juiste value teruggeeft.

Mijn vraag is; hoe kan ik die "\1" omzetten naar een gewone string zodat ik er else/if statement op los kan laten?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op maandag 10 december 2001 15:39 schreef McVirusS het volgende:
Levert de niet verwachte/gewenste output
Levert PRECIES de output die ik verwacht >:)
Ik heb een probleempje;
PHP:
1
2
3
4
5
6
7
8
9
10
<?
function parseValue($str) {
    $waarde = "mod";
    if ($str == $mod) {
        return "<b>'$str' is gelijk aan '$waarde'</b>";
    } else {
        return "<b>'$str' is niet gelijk aan '$waarde'</b>";
    }
}
?>
waarom $waarde definieren als je die toch niet gebruikt >:)

Het is maandag he :P

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Op maandag 10 december 2001 15:42 schreef dusty het volgende:

[..]

waarom $waarde definieren als je die toch niet gebruikt >:)

Het is maandag he :P
Grrmppfft...........ja het is maandag :).......maar het probleem blijft nog gewoon hoor :).

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

lol@dusty
dat lost het wel op :) niet dus

print_r($str);

wat geeft dat?

Doet iets met Cloud (MS/IBM)


  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Op maandag 10 december 2001 15:44 schreef D2k het volgende:
lol@dusty
dat lost het wel op :)
Niet dus :).

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op maandag 10 december 2001 15:45 schreef McVirusS het volgende:

[..]

Niet dus :).
zie mijn edit :)

Doet iets met Cloud (MS/IBM)


  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Probeer dit eens:
PHP:
1
2
3
4
5
<?
function parse($str) {
    return parseValue(ereg_replace("\\[([ ._a-zA-Z0-9-]*)\]","\\1",$str));
}
?>

edit:

Is ook niet helemaal wat je bedoeld

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Op maandag 10 december 2001 15:44 schreef D2k het volgende:
print_r($str);

wat geeft dat?
print_r ($str):
code:
1
\1

var_dump($str):
code:
1
string(2) "\1"

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Op maandag 10 december 2001 15:48 schreef RdeTuinman het volgende:
Is ook niet helemaal wat je bedoeld
Nope; ik wil dus een bepaald patroon vinden en de waarde daarvan replacen met iets wat een functie teruggeeft. (En die functie moet dus iets met dat patroon doen)......bla bla bla :).

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Je mag dus blijkbaar geen functie opgeven waar je de waarde mee geeft.. (werkt ook niet voor de preg_replace..)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Op maandag 10 december 2001 15:58 schreef dusty het volgende:
Je mag dus blijkbaar geen functie opgeven waar je de waarde mee geeft.. (werkt ook niet voor de preg_replace..)
Blijkbaar...maar dat vindt ik raar.........zou er geen mogelijkheid zijn om die "\1" om te zetten naar een gewone string? Moet toch kunnen?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op maandag 10 december 2001 15:58 schreef dusty het volgende:
Je mag dus blijkbaar geen functie opgeven waar je de waarde mee geeft.. (werkt ook niet voor de preg_replace..)
dit werkt wel hoor:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function parse($str)
{
    return preg_replace("/\\[([ ._a-zA-Z0-9-]*)\]/e", "parseValue(\\1)", $str);
}

function parseValue($str) 
{
    echo "blaat: $str";
}

parse("[bla bla bla]");
// resultaat: "blaat: bla bla bla"
?>

of begrijp ik je niet goed?

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 15-09 16:29
Op maandag 10 december 2001 17:37 schreef marcusk het volgende:

[..]

dit werkt wel hoor:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function parse($str)
{
    return preg_replace("/\\[([ ._a-zA-Z0-9-]*)\]/e", "parseValue(\\1)", $str);
}

function parseValue($str) 
{
    echo "blaat: $str";
}

parse("[bla bla bla]");
// resultaat: "blaat: bla bla bla"
?>

of begrijp ik je niet goed?
Misschien werkt dat voorbeeld wat je geeft wel maar dit is niet wat ik wil :)...probeer het eens met if/else statements in de parseValue functie?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op maandag 10 december 2001 20:43 schreef McVirusS het volgende:
Misschien werkt dat voorbeeld wat je geeft wel maar dit is niet wat ik wil :)...probeer het eens met if/else statements in de parseValue functie?
ok...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
    
    function parse($str) 
    {
        return preg_replace("/\\[([ ._a-zA-Z0-9-]*)\]/e", "parseValue(\\1)", $str);
    }
    
    function parseValue($str)
    {
        $waarde = "mod";

        if ($str == $waarde)
            return "<b>'$str' is gelijk aan '$waarde'</b>";
        else
            return "<b>'$str' is niet gelijk aan '$waarde'</b>";
    }
    
    $waarde = "VOOR [mod] MIDDEN [mod] ACHTER";
    echo parse($waarde);
?>

resultaat: "VOOR 'mod' is gelijk aan 'mod' MIDDEN 'mod' is gelijk aan 'mod' ACHTER" :)

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op maandag 10 december 2001 21:04 schreef marcusk het volgende:
PHP:
1
2
3
<?
return preg_replace("/\\[([ ._a-zA-Z0-9-]*)\]/e", "parseValue(\\1)", $str);
?>
Er is hier dus de 'e' modifier gebruikt, wat betekent dat de replacestring door php geevalueerd wordt. Aangezien \\1 een string oplevert, moet dit dan ook tussen aanhalingstekens gezet worden. Anders zou er parseValue(mod) staan, en dat hoort natuurlijk parseValue('mod') te zijn (of "mod").

Het wordt dus:
PHP:
1
2
3
<?
return preg_replace("/\\[([ ._a-zA-Z0-9-]*)\]/e", "parseValue('\\1')", $str);
?>

Voorwaarde is wel, dat die \\1 geen ' bevat en daar zijn we al direct een beperking van php tegengekomen, want als \\1 wel een ' zou bevatten, dan zou deze geescaped moeten worden, maar php doet dat niet automatisch...
Pagina: 1