:ここで例えばにpreg_replaceと隠された文字や隠されたエンコーディング
(\>*\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)
は、それはすべてのメーリングリスト-署名を削除します。
>> 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
しかし、私がpreg_replaceを使ってPHPで正確に同じことをしようとすると、3つのメーリングリスト署名のうち最後のものだけが削除されます。そして、それは与えられた変数でのみです。私は、ブラウザに変数の内容をエコーし、$text = 'long echoed text'
のような新しい変数にコピーすると動作します。
$slugs = 'talk|tagging|talk-us|talk-gb|talk-de|osm-talk';
$pattern = '!(\>*\s?)_______________________________________________\n(\>*\s*)('.$slugs.') mailing list\n(\>*\s*)('.$slugs.')@openstreetmap.org\n(\>*\s*)https://lists.openstreetmap.org/listinfo/('.$slugs.')!mi';
return preg_replace($pattern,'',$text);
だから、元の変数に隠れたエンコーディングや隠し文字があるはずです。しかし、どのようにして問題を見つけ出すことができますか?
編集:それ以降は改行に問題があり、後で>
のように私を探しますが、私はそれを正確にどのようにチェックして解決するのかまだ分かりません。
EDIT2:私は($テキストは、元の$テキスト2は、エコー$テキストの結果である)$テキスト== $のテキスト2をしようとしたとき、私はFALSE
TLを得る; DR:私は与えられたを使用する場合変数それは動作しません。しかし、私は変数をブラウザにエコーすると、テキストを新しい変数にコピーすると動作します。何がそこに隠されていますか?
エンコーディングに問題がある場合は、uモディファイアを使用してみてください。 –
http://ideone.com/BdG43Y –
はい、phpliveregexのように動作します。私は変数にテキストを置いたときのようです(申し訳ありませんが、全体の質問を読んだこともありますか? )。私は私の質問を更新しました。それは、別の正規表現で同様の問題があるので、改行のあるもののように見えます。 – Asara