String zwischen zwei Teilstrings heraus-filtern ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abschneiden
alternative string
array
code
einfache methode
ergebnis
face
filtern
gesamten string
http
leer nix
marke
markierung
parameter
schleife
selten vorkommen
start
string
text
url
-
Hallo
wie kann ich aus einem String einen bestimmten Teil heraus-filtern,
welcher sich zwischen zwei "Markern" = Teilstrings befindet ... ?!?
oder anders gefragt:
warum bekomme ich hier zwar ein Array, das aber komplett leer ist ???
(die Struktur ist vorhanden, Keys, aber die Werte sind jeweils leer / nix drin)
die Variable $meinstring enthält entsprechende Inhalte (z.B. Kommentar-Text)
$pattern = '#<!-- ([\w]+) -->(.*)<!-- ([\w]+) -->#is'; preg_match_all($pattern, $meinstring, $ergebnis); echo "<pre> \r\n"; print_r($ergebnis); echo "</pre> \r\n";
Ergebnis:
----------------------------------
Array
(
[0] => Array
(
)
[1] => Array
(
)
[2] => Array
(
)
[3] => Array
(
)
)
----------------------------------
was ist falsch?
HELP ?!
edit:
oder als Alternative: String vor und nach den Markern abschneiden
und dannn noch die Marker entfernen .... oder so ... Stringfunktionen?
?
Beitrag zuletzt geändert: 4.9.2010 16:29:56 von lukepress -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich denke mal das was fabo geschrieben hat kommt dem zwar recht nahe, aber eine einfache Methode wäre einfach den String durchzugehen...
also per for/while-schleife gucken wann
substr($string,$zaehler,1)==$trennzeichen
dann einfach den String davor abschneiden und das ganze ein zweites Mal machen und in diesem Fall alles abschneiden was dahinter steht. So kannst du auch ein Trennzeichen zweimal verwenden. Man sollte jedoch absichern das man in seiner Schleife stoppt wenn man die Länge des Strings zu überschreiten versucht..
Leistungstechnisch wird fabo's Methode jedoch um einiges besser sein, da du hier ja den gesamten String durchsuchst. Als kompletter Code würde mein Vorschlag wohl in etwa so aussehen:
function suche($string, $trennzeichen){ for($i=0;$i<strlen($string)&&substr($string,$i,1)!=$trennzeichen;$i++){ } $string=substr($string,0, $i+1); for($i=0;$i<strlen($string)&&substr($string,$i,1)!=$trennzeichen;$i++){ } return substr($string,0, $i); }
Ich habe das jedoch nicht nochmal getestet, kann sein das bei $i+1 nur $i hin muss, aber das findet man ja schnell durch ausprobieren heraus. -
Ich hab da so eine Vermutung, probier mal diesen pattern aus, ich glaube der wird dir helfen:
$pattern = '#<!-- ([\w\s]+?) -->(.*?)<!-- ([\w\s]+?) -->#is';
-
aus performance-gründen sollte man preg... sachen nur in begründeten fällen anwenden. hier ist es unbegründet, daher eine einfache lösung:
(
hier findest viele zeichen für die markierung, die normal sehr selten vorkommen.
ich habe für start utf8 [U+2639 WHITE FROWNING FACE]: "☹" und
für end utf8 [U+263A WHITE SMILING FACE] : "☺" genommen.
die funktion ist ein einzeiler
;o)
<?php $startmarke = "☹"; $endmarke = "☺"; $text = "das ist ein string☹lorem ipsum dolor sit amet☺mit start und endmarke!"; exit ("<h4>string zwischen marken ausgeben:</h4>\n<pre>\n".print_r (zwischenstring ($startmarke, $endmarke, $text), true)); # parameter: # @startmarke, @endmarke, @text function zwischenstring ($s, $e, $t) { return reset (explode ($e, end (explode ($s, $t)))); } ?>
-
Meinst du vllt. sowas:
<?php $text = "<b>y</b>"; $reg_expression = "/\<b\>(.*)\<\/b\>/iU";//Marker wären hier <b> und </b> $reg_exchange = "$1"; echo preg_replace($reg_expression,$reg_exchange, $text); ?>
Ausgabe wäre: y
War sowas gemeint? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage