Reguläre Ausdrücke (String zwischen zwei beschriebenen Strings auslesen)

Megamorph

Mitglied
Hallo liebe Community,

ich habe mich nun ein wenig mit regulären Ausdrücken beschäftigt (testen, ersetzen, auslesen), aber für die Aufgabenstellung "Gebe mir den String zwischen zwei mit regulären Ausdrücken beschriebenen Strings zurück" habe ich keine Lösung gefunden.

Bsp:
HTML
HTML:
<meta http-equiv='refresh' content='0; URL=/site/index.php?page=forum&session=asdlfj3902efs&var=1'>

Die Strings "URL=/site/index.php?page=forum&session=" und "&var=1" sind statisch.
Wie kann ich jetzt mit regulären Ausdrücken erreichen, dass er mir "asdlfj3902efs" zurück gibt, wenn ich der fertigen Funktion später als Parameter nur den String davor "URL=/site/index.php?page=forum&session=" und den String dannach "&var=1" übergebe?

Vielen Dank!
 
Probier mal folgenden regulären Ausdruck:
Code:
URL=/site/index\.php\?page=forum&session=([0-9a-z]+)&var=1
 
Dafür brauchst du keine regulären Ausdrücke, wenn die Strings in dem Format übergeben werden (weil es einfach nicht nötig ist).

PHP:
<?php

$str = "<meta http-equiv='refresh' content='0; URL=/site/index.php?page=forum&session=asdlfj3902efs&var=1'>";

$pattern[] = "forum&session=";
$pattern[] = "&var";

$hit = substr(stristr($str, $pattern[0]), strlen($pattern[0]));
echo substr($hit, 0, strlen($hit) - strlen(stristr($str, $pattern[1])));
?>

So würde ich es lösen.
Allerdings wird das wahrscheinlich nicht die Aufgabe lösen, wie dir jemand gestellt hat ;)

/edit:
Aber Gumbos Vorschlag funktioniert auch ;)
 
Zuletzt bearbeitet:
Vielen Dank euch beiden!

@Gumbo:

Die beiden umrandenden Strings sind zwar im HTML-Quelltext statisch, aber man möchte ja uU auch einmal den String zwischen zwei anderen Stellen haben. Aber trotzdem thx für die Hilfe!

@Felix Jacobi:

Genau das habe ich gesucht, vielen Dank. Ich brauchte die Lösung das Problems in einem eigenen Programm (zur Analyse von HTML-Texten), also ist die Art und Weise der Lösung egal. Big Thx (-:

Mit freundlichen Grüßen!
 
Hallo nochmal,

ich habe mich jetzt doch für die Verwendung von RegEx entschieden, da die Strings zum eingrenzen der benötigten Werte (vorallem in Tabelle) doch nicht so eindeutig sind, wie ich es mir erhofft hatte.

Beispiel:
HTML:
<td align="center" class='header' width="90"><font >80.644</font></td>
<td align="center" class='header' width="90"><font color='#ff0000'>100.815</font></td>
<td align="center" class='header' width="90"><font >41.661</font></td>

RegEx:
(danke an Gumbo)
Code:
([0-9.]+)</font></td>

Ausgabe:
Code:
80.644</font></td>
100.815</font></td>
41.661</font></td>

Ich finde es zum Beispiel schon sehr toll, dass sich die RegEx nicht durch die Änderung der Schriftfarbe irritieren lassen (wie es bei der vorigen Lösung der Fall war).

Allerdings habe ich jetzt in der Ausgabe immer noch das "</font></td>". Soll ich das mit normalen Stringoperationen (pos, delete) einfach ausschneiden oder gibt es da eine Lösung, dass das "</font></td>" garnicht erst in die Ausgabe gerät?

Nochmal vielen Dank für die Hilfe
Megamorph
 
Sofern es immer Zahlen sind bzw. nie HTML Tags beinhalten könntest du [phpf]strip_tags[/phpf] verwenden.
 
Hallo,

jo darüber habe ich auch schon nachgedacht, allerdings ist es auch manchmal Text (und ab und zu auch HTML). Ich habe es jetzt ganz einfach mit delete und pos gelöst.

Vielen Dank nochmal für die Hilfe (-
Megamorph
 
Zurück