Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: PHP REGEXP gesucht
AUTOR BEITRAG
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#1 - 19.11 14:41

Hi all, ich suche einen regulären ausdruck der mir alle attribute aus folgendem code filtert:

<php:inputbox name="test" value="blub" onclick="blub();"/>

Zur anmerkung:
die anzahl der attribute ist nicht beschränkt. es kann also sein, dass es mehrere attribute gibt.
Das ganze hätte ich gerne als array in dieser form:

$a['type'] = "inputbox"
$a['name'] = "test"
$a['value'] = "blub"
$a['onclick'] = "blub();"

Einzige kriterien die immer gleich bleiben sind <php: und />
Jemand eine idee dazu? Bin nicht so begabt in regulären ausdrücken, vielleicht gibt es aber hier jemanden der sich damit auskennt und mir helfen möchte ;)

Danke sehr

[edit]
Achso, es gibt noch mehr attribute ausser "name", "value" und "onclick". Also beliebig viele. Ebenfalls ist der typname nicht immer gleich!
vaest´ark // patrick *ich bin hier nicht der depp*

RANG Master of Clanintern

#2 - 19.11 16:31

PHP-code:
<?php
$str 
'<php:inputbox name="test" value="blub" onclick="blub();"/>';

preg_match('%<php:(.[^\s]*)%i'$str$m0);
preg_match_all('%(?:\s+(.\w*)="(.*)")%iU'$str$m1);

echo 
'<pre>';
var_dump($m0);
var_dump($m1);
echo 
'</pre>';
?>
ich hab mich jetzt nicht weiter damit auseinandergesetzt, aber es könnte in einem regulären ausdruck gehen. das kann aber jemand anders machen.
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#3 - 20.11 07:37

hi, erstma danke für deine bemühungen.
allerdings ist es nicht ganz so wie ich es mir vorstelle.
die attribute liest dein regexp perfekt aus, allerdings nicht den typen (nach <php:)
ausserdem beachtet dein ausdruck auch nicht das endzeichen />
Das heißt, dass auch unvollständige strings erkannt werden (wie z.B. <php:b a="z")
Das ist nicht gewollt. Habe versucht das ganze selber hin zubekommen, habe es aber nicht geschafft. Werde weiter probieren.
klaustopher

RANG Skill Newbie

#4 - 20.11 16:22

dann würde ich zuerst mal einen preg_match_all für "<php:*/>" und dann die von vaest angegeben matches auf den matches-array dieses teils anwenden

Sorry, gerade zu faul die Regexp dafür zu schreiben, das kriegste schon selber
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#5 - 20.11 18:49

hm also nach tausend mal versuchen schaff ich es noch immer nicht.
hab bis jetzt das hier:

String: <php:inputbox name="test" value="jha"/>

<php:(.*)\/> liefert: inputbox name="test" value="jha"

Bezogen auf das vorige ergebnis:
(?:\s+(.\w+)="(.\w+)") liefert: name, test, value, jha
(.\w+)(?:\s) liefert: inputbox

Aber irgendwie krieg ich das nicht vereint. man das ist nen dreck.
masta // thomas

RANG Prophet of Clanintern

#6 - 26.11 10:06

PHP-code:
<?php function get_attributes($str)
{
    
    if(!
preg_match('/<php:([^\s]+)\s(.+)\/>/i'$str$m))
        return 
false;

    
$return['type'] = $m[1];
    
    
preg_match_all('/(\w+)=["\'\s]*([^="\'\s]+)["\'\s]*"/i'$m[2], $all);
    for(
$i 0$i count($all[0]); $i++)
        
$return$all[1][$i] ] = $all[2][$i];

    return 
$return;
?>
‹• ⊂⌈α⊂κ¥ •›

RANG Deckschrubber

#7 - 26.11 13:19

danke thomas, werde das heut abend mal testen.
hab gestern aber bereits selber eine möglichkeit gefunden. nun muss ich erst einmal schauen welche schneller und sicherer ist.
thx