Ich suche nach einem einfachen Weg, passende Teile von zwei Strings in PHP zu finden (speziell im Zusammenhang mit einem URI)
Betrachten Sie zum Beispiel die zwei Zeichenfolgen:
und
/ ~ machinenhost / deployment_folder / users / bob / settings
Was ich brauche, ist, den übereinstimmenden Teil dieser zwei Saiten von der zweiten Saite abzuhacken, was folgendes ergibt:
Benutzer / Bob / Einstellungen
vor dem Anhängen der ersten Zeichenfolge als Präfix, eine absolute URI bilden.
Gibt es eine einfache Möglichkeit (in PHP), zwei beliebige Strings für übereinstimmende Teilstrings in ihnen zu vergleichen?
EDIT: wie gesagt, meinte ich die längste übereinstimmende Zeichenkette, die für beide Zeichenketten gemeinsam ist
Ich bin mir nicht sicher, ob Sie Ihre vollständige Anfrage verstanden haben, aber die Idee ist:
Sei A deine URL und B dein "/ ~ machinenhost / deployment_folder / users / bob / settings"
Ich habe noch nicht getestet, aber wenn Sie wirklich brauchen, kann ich Ihnen helfen, diese brillante (ironische) Lösung funktionieren zu lassen.
Beachten Sie, dass dies mit regulären Ausdrücken wie
möglich ist %Vor%Bearbeiten: Ich denke, dass dein letzter Kommentar meine Antwort ungültig macht. Aber was Sie wollen, ist Teilstrings zu finden. Sie können also zuerst mit einem schweren Algorithmus beginnen, der versucht, B [1: i] in A für i in {2, Länge (B)} zu finden und dann einige dynamische Programmierung Zeug.
Es scheint kein Standardcode für Ihre Anforderung zu sein. Also lasst uns nach einem einfachen Weg suchen.
Für diese Übung habe ich zwei Methoden verwendet, eine für das Finden der längsten Übereinstimmung und eine weitere für das Abschneiden des passenden Teils.
Die Methode FindLonestMatch () zerlegt einen Pfad, sucht Stück für Stück nach einer Übereinstimmung im anderen Pfad und behält nur eine Übereinstimmung bei, die längste (keine Arrays, keine Sortierung). Die Methode RemoveLonestMatch () verwendet das Suffix oder den Rest nach der Position mit der längsten Übereinstimmung.
Hier der vollständige Quellcode:
%Vor%Dies ist eine repräsentative Teilmenge von Testfällen:
%Vor%Das Ausführen von vorherigen Testfällen liefert die folgende Ausgabe:
%Vor%Vielleicht können Sie sich die Idee dieses Codeelements vorstellen und es in etwas verwandeln, das Sie für Ihr aktuelles Projekt nützlich finden. Lass es mich wissen, wenn es auch für dich funktioniert. By the way, Herr oreX Antwort sieht auch gut aus.
Das Finden der längsten gemeinsamen Übereinstimmung kann auch mit regex erfolgen.
Die folgende Funktion benötigt zwei Strings, einen zum Erstellen eines Regex und den anderen zum Ausführen.
%Vor%Es wird eine Regex mit der kürzeren der beiden Strings erzeugen, obwohl die Performance wahrscheinlich die gleiche ist. Es kann fälschlicherweise Zeichenfolgen mit wiederkehrenden Teilzeichenfolgen finden, und wir sind auf übereinstimmende Zeichenfolgen von zwei Zeichen oder mehr beschränkt. Zum Beispiel:
%Vor%Unabhängig davon funktioniert es mit einer alternativen Methode und die Regex kann verfeinert werden, um weitere Situationen zu bewältigen.
Tags und Links php uri string-matching