PHP: Der beste Weg, um Text in Klammern zu extrahieren?
Was ist die beste/effizienteste Methode zum extrahieren von text zwischen den Klammern? Sagen wollte ich den string "text" aus der Zeichenfolge "alles ignorieren außer dieser (text)" in die effizienteste Art und Weise möglich.
Bisher die beste, die ich mir ausgedacht habe, ist dies:
$fullString = "ignore everything except this (text)";
$start = strpos('(', $fullString);
$end = strlen($fullString) - strpos(')', $fullString);
$shortString = substr($fullString, $start, $end);
Gibt es einen besseren Weg, dies zu tun? Ich weiß, im Allgemeinen mit regex tendenziell weniger effizient, aber es sei denn, ich kann reduzieren die Anzahl der Funktionsaufrufe, vielleicht wäre der beste Ansatz? Gedanken?
InformationsquelleAutor der Frage Wilco | 2008-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich würde einfach eine regex und durch". es sei denn, Sie tun genug, Iterationen, die zu einem großen performance-Problem, es ist nur einfacher code (und zu verstehen, wenn Sie Blick zurück auf Sie)
InformationsquelleAutor der Antwort Owen
So, tatsächlich, der code, den du gepostet hast funktioniert nicht:
substr()'s
Parameter $string, $start " und " $Längeundstrpos()'s
Parameter$haystack
$needle
. Leicht modifiziert:Einige Feinheiten: ich habe
$start + 1
in der offset-parameter, um zu helfen, PHP aus, während Sie diestrpos()
Suche auf die zweite Klammer; erhöhen wir$start
ein und reduzieren$length
ausschließen die Klammern aus dem Spiel.Auch, es gibt keine Fehlerkontrolle, die in diesem code: du wirst wollen, stellen Sie sicher, dass
$start
und$end
nicht === false, bevor Sie diesubstr
.Als für die Verwendung
strpos/substr
versus regex; performance-Weise, dieser code wird schlagen Sie einen regulären Ausdruck, der die Hände nach unten. Es ist ein wenig wordier obwohl. Ich esse und atmestrpos/substr
so habe ich nichts dagegen diese zu viel, aber jemand anderes vielleicht lieber die Kompaktheit eines regex.InformationsquelleAutor der Antwort Edward Z. Yang
Einen regulären Ausdruck verwenden:
InformationsquelleAutor der Antwort Rob
Dies ist ein Beispiel-code, extrahiert alle den text zwischen '[' und ']', und speichern Sie es 2 separate arrays(also text in Klammern in ein array und text außerhalb der Klammern in einem anderen array)
Ausgabe:
extract_text("Hallo, how are you?");
produzieren:
extract_text("Hallo [http://www.google.com/test.mp3] wie sind Sie?");
produzieren
InformationsquelleAutor der Antwort Sachin Murali G
Diese Funktion kann nützlich sein.
strpos() => die wird verwendet, um die position des ersten Auftretens einer Zeichenfolge.
strrpos() => die wird verwendet, um die position des ersten Auftretens einer Zeichenfolge.
InformationsquelleAutor der Antwort vijay