2016-08-30 3 views
0

ich viele Strings haben, die wie folgt aussehen:PHP lassen nur Text zwischen bestimmten Zeichen

[additional-text Sample text...] 

Es gibt immer eine öffnende Klammer + Zusatztext + Leerzeichen und eine geschlossene Klammer am Ende und ich brauche um alle zu entfernen, so dass die endgültige Zeichenfolge wie folgt aussehen würde:

Sample text... 

Jede Hilfe oder Anleitung wird sehr geschätzt.

Antwort

1

Sie verwenden diese o alle Spiele innerhalb eines Textblocks erhalten:

preg_match_all("/\[additional-text (.*?)\]/",$text,$matches); 

alle Ihre Texte werden in $ matches [1]. So wird das sein:

$text = "[additional-text Sample text...]dsfg fgfd[additional-text Sample text2...] foo bar adfd as ff"; 
preg_match_all("/\[additional-text (.*?)\]/",$str,$matches); 
var_export($matches[1]); 
+0

Sehr elegante und bevorzugte Lösung! – Domas

1

Erhalten Sie den Teil Sie als erfassten Gruppe behalten mögen:

^\[\S+\s([^]]+)\]$ 

Jetzt im Austausch, verwenden Sie die einzige erfasste Gruppe, \1.

Demo

1

können Sie verwenden:

$re = '/\[\S+\s|\]/'; 
$str = "[additional-text Sample text...]"; 

$result = preg_replace($re, '', $str); 
//=> Sample text... 

RegEx Demo

1

Verwenden substr die ersten 17 Zeichen zu entfernen. Verwenden Sie regex die letzten beiden zu entfernen:

$val = '[additional-text Sample text...]'; 
$text = preg_replace('#\]$#', '', substr($val, 17)); 
1

Sie auch

dies tun können
$a = '[additional-text Sample text...]'; 
$a= ltrim($a,"[additional-text "); 
echo $a= rtrim($a,"]"); 
1

Es gibt keine Notwendigkeit, in regex verwenden substr:

$s = "[additional-text Sample text...]"; 
echo substr($s, 17, strlen($s)-18); 

Wo 17 ist die Länge der [additional-text und 18 ist das gleiche + 1 für die letzte ].

Siehe PHP demo

Eine Regex Lösung auch basisch ist:

^\[additional-text (.*)]$ 

oder - wenn es vor Ende keine ] sein:

^\[additional-text ([^]]*)]$ 

und ersetzen mit $1 Rückreferenzierung.Siehe die regex demo, und hier ist ein PHP demo:

$result = preg_replace('~^\[additional-text (.*)]$~', "$1", "[additional-text Sample text...]"); 
echo $result; 

Muster Details:

  • ^ - Beginn der Zeichenfolge
  • \[ - eine wörtliche [
  • additional-text - Literaltext
  • (.*) - null oder mehr Zeichen außer einem Zeilenumbruch so viele wie möglich bis
  • ]$ - ein ] am Ende der Zeichenfolge.
+0

Bitte überprüfen Sie, ob ich nichts verpasst habe und ob alles klar ist. Falls Sie weitere Hilfe benötigen, zögern Sie nicht, hier einen Kommentar abzugeben. –

Verwandte Themen