PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : teile in einer zeichenkette (regex)


flobee
24.09.2004, 00:27:14
hallo, ich stehe mal wieder wie der ochs vorm berg :-(

ich suche in einer zeichenkette nach teilen die sich in einer klammer befinden und dessen inhalt ich benötige. habe ich mehrere klammern so benötige ich auf jeden fall immer die letzte und dort erwarte ich eine zahl in der klammer
$str = "möglich: (123ABC) und diese will min. ich haben: (456) text";
der ausdruck den ich mir bisher zusammen gewurschtelt habe sieht so aus und erfüllt nicht ganz meine wünsche da sie nur den ersten treffer findet.
preg_match('/([^(]([0-9])+)/', $str, $teile);
/* Array(
[0] => 123
[1] => 123
[2] => 3
*/
preg_split macht es eigentl. richtig, nur verkehrt herunm (killt alle einträge die ich benötig)
kann mir jemand helfen wie ich weiter vorgehen kann!?

gruß flobee

flobee
24.09.2004, 02:53:26
hallo, nach vielem lesen und probieren hab ich vielleicht das ergebniss, kann das jemand prüfen? vielen dank!


$str = 'möglich:(123ABC) und diese (6) will haben:(456) bzw. genau diesen 666- (99) text dannach ';
$needle = '/[(]([0-9]+)[)]/';
preg_match_all( $needle, $str, $treffer);

das letzte item des letzten array elements müsste mein wunsch ergebniss sein!? oder?: $treffer[1][2]
bzw:
$last = count($treffer)-1;
$item = count($treffer[$last])-1;
$treffer[$last][$item]

Usul
24.09.2004, 23:52:12
Ueberpruef es doch schnell und unkompliziert online (http://www.personeel.unimaas.nl/H.Schotel/Testaregex/) selbst.

/[(]([0-9]+)[)]/ <- Was fuer ein Krampf

Klammern muessen maskiert werden, dann kannste dir die eckigen Klammern sparen. Und statt [0-9] kannste auch d schreiben.

Wie waere es denn mit:
/(d+)/ <- Das selbe in schoen

Haste schon ein Tutorial (http://www.regenechsen.de/regex_de/regex_1_de.html) gelesen?

Ich wuerde dein skript so modifzieren (ungetestet):

$str = 'möglich:(123ABC) und diese (6) will haben:(456) bzw. genau diesen 666- (99) text dannach ';
preg_match_all( /(d+)/, $str, $treffer);
$letzteKlammer = '';
if( isset($treffer[0]) )
{
$letzteKlammer = $treffer[0][sizeOf($treffer[0])-1];
}

flobee
26.09.2004, 20:37:35
hallo, danke für deine infos!
d habe ich absichtlich nicht geschrieben damit jeder versteht was gemeint ist

dein ausdruck ist wirklich schneller , weiss auch nicht warum ich da nicht drauf gekommen bin. allerdings bekome ich bei meinem ausdruck die zahlen werte die ich letzten endes benötige auch heraus, ist es da ratsamer dann mit str_replace weiter zu arbeiten!?
mein ausdruck:
Array
(
[0] => Array
(
[0] => (6)
[1] => (456)
[2] => (99)
)

[1] => Array
(
[0] => 6
[1] => 456
[2] => 99
)

dein ausdruck
[0] => Array
(
[0] => (6)
[1] => (456)
[2] => (99)
)
gruß flobee

Usul
26.09.2004, 21:55:31
ach willste gleich nur die zahlen in den klammern?

na sag das doch gleich. dann probier mal dieses regex:
'(?<=()d+(?=))'

edit: bessere seite zum online testen, die auch obiges regex unterstuetzt: http://www.fileformat.info/tool/regex.htm