2017-04-03 2 views
0

Wir haben ein Feld in einer Datenbank (eine Laravel 5,4-Stelle), die Zellen mit Daten wie diese hat:PHP/Laravel Wählen Sie Text in Klammern nach bestimmten Anzahl

"123(Description of 123) 124(Description of 124) 125(Description of 125)" 

Alle in einer langen Reihe. Ich muss den eckigen Text ausgeben, aber nur die angegebene Nummer. Übergeben Sie beispielsweise die Zahl 123 als Parameter, und die Beschreibung von 123 wird zurückgegeben.

Ich habe das RegexMuster mit preg_match zu verwenden, die die Daten aus den Klammern extrahieren:

$sTest = "247(text goes here)248(more here)"; 
preg_match("/\(([^\)]*)\)/", $sTest, $aMatches); 
$sResult = $aMatches[1]; 

Aber ich weiß nicht, wie PHP anweisen, die speziellen Klammern nach einer bestimmten Anzahl zu lesen.

Hat jemand bitte irgendwelche Vorschläge? Vielen Dank im Voraus!

+4

Klingt für mich wie eine große Datenbank Design Error. Vielleicht sollten Sie sich kurz eine Anleitung zum Entwerfen einer relationalen Datenbank ansehen. – RiggsFolly

+0

Warum nicht einfach als Teil des Musters weitergeben? Wie 'preg_match ("/\ b ". $ Id." \ (([^)] *) \)/", $ STest, $ aMatch);'? –

+0

Sie müssen Ihre Daten in JSON String –

Antwort

0

Während das Umgestalten der Datenbank wie ein Fix aussehen könnte, besteht eine aktuelle Umgehung darin, die ID der geklammerten Daten als Teil des Regex-Musters zu übergeben.

Betrachten this snippet:

$id = 248; 
$sTest = "247(text goes here)248(more here)"; 
preg_match("/\b" . $id . "\(([^\)]*)\)/", $sTest, $aMatches); 
$sResult = $aMatches[1]; 
echo $sResult; 

Hier ist \b eine Wortgrenze eine Zahl als ganzes Wort entsprechen (um nicht 1 in 21 übereinstimmen) und $id wird ein Teil des Musters (aber da Sie Holen Sie nur den Inhalt der ersten Erfassungsgruppe mit $aMatches[1], es wird nur als Kontext verwendet, und nicht Teil der Extraktion).

+1

hinzufügen Danke Wiktor! Dies ist perfekt. Ein DB-Redesign ist definitiv geplant, aber als ererbte Situation brauchten wir eine temporäre Lösung, um Zeit zu gewinnen. Ich schätze deine Hilfe sehr, danke! –

Verwandte Themen