Reguläre ausdrücke ?

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hallo,
wollte mal fragen ob mir einer sagen kann wie man aus folgenden String
PHP:
<tr align="left">
    <td><span class="normalfont"><b>ICQ-Nummer:</b></span></td>
    <td><span class="normalfont">123</span></td>
   </tr>
   <tr align="left">
    <td><span class="normalfont"><b>AIM-Name:</b></span></td>

    <td><span class="normalfont">keine Angabe</span></td>
   </tr>
   <tr align="left">
    <td><span class="normalfont"><b>YIM-Name:</b></span></td>
    <td><span class="normalfont">keine Angabe</span></td>
   </tr>
die ICQ Nummer raus filtert

Würde mich freuen wenn mir dort einer einen Tipp geben kann wie der Pattern aussehen muss.

PHP:
#<td><span class="normalfont">\'([0-9])\'</span></td>(.*)#
so geht leider nicht
 
Nimm die Hochkommata da raus, weil in deinem String keine drin sind, matcht es deswegen auch nicht.
Zweiter Fehler: Dein RegExp sucht nur einstellige ICQ-Nummern. Schreib hinter die Characterklasse für die Ziffern ein Plus für "ein oder mehrere Vorkommen (von [0-9])".
Das .* am Ende kannst du dir sparen.
 
Nimm die Hochkommata da raus, weil in deinem String keine drin sind, matcht es deswegen auch nicht.
Zweiter Fehler: Dein RegExp sucht nur einstellige ICQ-Nummern. Schreib hinter die Characterklasse für die Ziffern ein Plus für "ein oder mehrere Vorkommen (von [0-9])".
Das .* am Ende kannst du dir sparen.

Danke, habs mal so versucht:
PHP:
$str = preg_match_all('#<td><span class="normalfont">\+([0-9])+\</span></td>#', $string,$str);
print_r($str);
kommt immer nur 0 raus

was natürlich noch falsch ist, ist wenn im msn etc. auch ne nummer steht findet er die auch.
Kann man da auch sowas schreibe:
PHP:
$str = preg_match_all('#<td><span class="normalfont"><b>ICQ-Nummer:</b></span></td>
<td><span class="normalfont">\+([0-9])+\</span></td>#', $string,$str);
print_r($str);
 
In dem Fall wird in $str nur die Anzahl der Treffer gespeichert...

Um die Nummer zu bekommen könnte man das so machen:

PHP:
preg_match_all('#<td><span class="normalfont">([0-9]+)</span></td>#', $string,$str);
print_r($str[1][0]);


EDIT: $str:
Code:
Array
(
    [0] => Array
        (
            [0] => <td><span class="normalfont">123</span></td>
        )

    [1] => Array
        (
            [0] => 123
        )

)
 
In dem Fall wird in $str nur die Anzahl der Treffer gespeichert...
...

ok, danke das klappt.
Aber wenn ich das jetzt weiter verfeinern will
Sprich wenn folgender Code vor der ICQ nummer steht findet er nur das
PHP:
<td><span class="normalfont"><b>AIM-Name:</b></span></td>
    <td><span class="normalfont">31</span></td>
Deswegen währ es gut wenn er folgendes vorher sucht
PHP:
<td><span class="normalfont"><b>ICQ-Nummer:</b></span></td>
    <td><span class="normalfont">
Aber ich kann ja nicht
PHP:
#<td><span class="normalfont"><b>ICQ-Nummer:</b></span></td>
    <td><span class="normalfont">([0-9]+)</span></td>#
eingeben
 
Da is einer zu gierig :mrgreen: Setz den Modifikator U oder schreib ein Fragezeichen hinter das Pluszeichen, um es ungierig zu machen.
 
Da is einer zu gierig :mrgreen: Setz den Modifikator U oder schreib ein Fragezeichen hinter das Pluszeichen, um es ungierig zu machen.

sorry, geht das nicht das man diese Zeichenfolge sucht
PHP:
<td><span class="normalfont"><b>ICQ-Nummer:</b></span></td>
<td><span class="normalfont">123</span></td>
?
Weil solange der string nur so kurz ist klappt alles, wenn aber der string aus mehreren Tabellen etc. besteht findet er nix mehr.
 
Geht natürlich, aber du musst bedenken, dass Leerzeichen und Zeilenumbrüche zwischen den beiden Zeilen sind. Benutze hierbei \s*, um die Lücke zu füllen.