2016-08-26 3 views
1

Ich habe folgendes Thema:Preg_replace Inhalt mit der ID

$subject = '[ta #12286152] c-d0-231-34 drop [#3414a43]';

Ich will alles passen, die id gegeben haben. Mein Code ist dies, aber wenn gesetzt, 12286152 ist es okay ersetzt, aber wenn gesetzt, wurde alles Thema entfernt?

echo preg_replace('/(\[)(.*?)3414a43(.*?)(\])/', '', $subject);

Ich möchte alle in [] ersetzen, die MY-ID haben.

+0

Was ist Ihre gewünschte Ausgabe? –

+1

hast du '[^ \]] *' anstelle des ersten '(. *?)'? – Jakumi

Antwort

2

bekam das ganze Thema entfernt, weil die ersten [ die [ neben ta abgestimmt war, und .*? bis zum ersten 3414a43 abgestimmt. Siehe your regex demo.

Sie benötigen negierte Zeichenklasse [^][] oder [^]] verwenden:

/\[[^][]*3414a43[^][]*]/ 

Siehe regex demo

Muster Details:

  • \[ - eine wörtliche [
  • [^][]* - null oder mehr Zeichen andere als [ und ] ([^]]* passt auf 0+ nicht ] s)
  • 3414a43 - Ihre ID
  • [^][]* - Ebd.
  • ] - eine wörtliche Schließung ] Symbol (keine Notwendigkeit, es außerhalb einer Zeichenklasse zu entkommen)

Da Sie nicht erfasst verwenden, ich alle Erfassungsgruppe Klammern empfehlen, zu entfernen.

PHP demo:

$id = "3414a43"; 
$str = "[ta #12286152] c-d0-231-34 drop [#3414a43]"; 
$result = preg_replace('~\[[^][]*' . $id . '[^][]*]~', '', $str); 
echo $result;