2016-11-29 9 views
0

Ich habe ein Preg Muster, das ist ganz auf phpliveregex.com gut ersetzen arbeiten:preg_replace und versteckte Zeichen oder versteckte Codierung

(\>*\s?)_______________________________________________\n(\>*\s?)(talk|tagging|talk-us|talk-gb|talk-de|osm-talk) mailing list\n(\>*\s?)(talk|tagging|talk-us|talk-gb|talk-de|osm-talk)@openstreetmap.org\n(\>*\s?)https://lists.openstreetmap.org/listinfo/(talk|tagging|talk-us|talk-gb|talk-de|osm-talk) 

zum Beispiel hier, löscht er alle Mailing-Signaturen:

>> Text, blablabla 
>> 
>> _______________________________________________ 
>> talk mailing list 
>> [email protected] 
>> https://lists.openstreetmap.org/listinfo/talk 
> 
> 
> 
>------------------------------------------------------------------------ 
> 
>_______________________________________________ 
>talk mailing list 
>[email protected] 
>https://lists.openstreetmap.org/listinfo/talk 

-- 
personal signature, blabla._______________________________________________ 
talk mailing list 
[email protected] 
https://lists.openstreetmap.org/listinfo/talk 

Aber wenn ich genau dasselbe in php mit preg_replace versuche, wird nur die letzte der drei Mailinglisten-Signaturen gelöscht. Und das ist nur mit der gegebenen Variable. Wenn ich den variablen Inhalt im Browser widerspiegele und diesen in eine neue Variable wie kopiere, funktioniert es.

Also ich denke, es muss einige versteckte Codierung oder versteckte Zeichen sonst in der ursprünglichen Variable sein. Aber wie kann ich herausfinden, was das Problem ist?

edit: es sieht für mich jetzt aus, als gäbe es ein Problem mit linebreaks und der > danach, aber ich weiß immer noch nicht, wie ich es genau überprüfen und lösen könnte.

edit2: wenn ich $ Text versuchen == $ text2 (wobei $ Text das Original ist ein $ text2 das Ergebnis von echo $ Text ist), erhalte ich FALSCH

TL; DR: wenn ich die gegebene verwenden Variable funktioniert nicht. Aber wenn ich die Variable im Browser echo, kopieren Sie den Text in eine neue Variable, es funktioniert. Was ist dort versteckt?

+0

Verwenden Sie u Modifier, wenn Sie Probleme mit der Codierung haben. –

+0

Es funktioniert, siehe http://ideone.com/BdG43Y –

+1

ja, da funktioniert es, wie es auf phpliveregex tut und wie es tut, wenn ich den Text in eine Variable (sorry, aber hast du sogar die ganze Frage gelesen?). Ich habe meine Frage aktualisiert, es sieht so aus, als wäre es etwas mit Zeilenumbrüchen, weil ich ein ähnliches Problem mit einem anderen Regex habe. – Asara

Antwort

1

Jetzt entspricht der obige Ausdruck Zeilenumbrüche codiert als "\ n". Zeilenumbrüche können jedoch abhängig von der Umgebung auch als "\ n", "\ r" und "\ r \ n" codiert werden. Anstatt also \ n, sollten Sie verwenden:

[\n\r]+ 

Siehe auch this question und den entsprechenden Artikel auf Wikipedia.

+1

danke für deine Antwort, ich habe es gerade ein paar Sekunden zuvor mit json_decode() herausgefunden :) aber deine Antwort ist trotzdem gut und richtig. Und wieder für andere Leute mit solchen Problemen: Wenn Sie json_decode() auf einer Zeichenkette verwenden, werden alle versteckten Zeichen angezeigt – Asara