我有一個預浸更換模式多數民衆贊成在工作相當不錯的phpliveregex.com:的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中完全相同時,只有三個郵件列表簽名中的最後一個被刪除。那隻與給定的變量。當我將可變內容回顯給瀏覽器時,將其複製到像$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