2016-07-06 17 views
1

preg_replace的以下調用失敗,並在content包含重音字符(例如àÿ)時返回空字符串。如何防止重音字符使PHP正則表達式失敗?

preg_replace('@([^=][^"])(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.\%\+#-]*(\?\S+)?[^\.\s])?)?)@', '$1<a href="$2" target="_blank">$2</a>', $content); 

我重寫了preg_replace正則表達式這種方式,和它的工作:

preg_replace('@([^=][^"])(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.\%\+#ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ-]*(\?\S+)?[^\.\s])?)?)@', '$1<a href="$2" target="_blank">$2</a>', $content); 

我怎樣才能使它更短?

+0

我不這麼認爲造成,如果我只放\ W當它看到一個重音字符 – Mireille28

+0

@ chris85它阻止總是:沒有!當使用u修飾符或模式以'(* UCP)'開頭時,'\ w'包含非ASCII字符。即使使用u修飾符或「(* UCP)」,它也不會與具有組合標記的字母匹配。 –

+0

我在哪裏設置你?在我的正則表達式分隔符關閉後? – Mireille28

回答

1

使用unicode可能會解決您的問題。

[\u00bf-\u00ff]