2011-05-25 74 views
1

(在PHP)我有以下字符串: w不夠匹配,我應該用什麼來代替?

$string = '<!--:fr--><p>Mamá lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut est et tortor sagittis auctor id ut urna. Etiam quañ justo, pharetra sed bibendum at, vulputate et augue.</p> <p>Curabitur cursus mi vel quam placerat malesuada. Fusce euismod mollis tincidunt. Sed cursus, sem et porta dictum, elit purus facilisis massa, eget consectetur nisi libero eget leo. Vivamus vitae mattis nulla. varius fermentum.</p><!--:-->' 

而且我想用

preg_replace('/<!--:[a-z]{2}-->(\w+)<!--:-->/', '${1}', $string) 

消除<!--:fr--><!--:-->但它返回相同的字符串$。問題是什麼?

+0

當模式被固定,那麼爲什麼不用'str_replce'試試? – diEcho 2011-05-25 05:14:15

+0

typo'str_replace' – Ibu 2011-05-25 05:15:07

+0

'\ w'僅匹配字母,數字和下劃線。它不符合「<" or ">」。 – 2011-05-25 05:09:28

回答

3

您的字符不屬於[a-zA-Z0-9_](這與\w相匹配)。您可以匹配[\s\S],這意味着任何空格或非空白字符(即所有內容)。

您也可以使用.s標誌。

嘗試......

preg_replace('/<!--:[a-z]{2}-->([\s\S]+?)<!--:-->/', '${1}', $string); 

Ideone

1

另一種可能性是,你只是刪除你不想要的部分。

preg_replace('/<!--:(?:[a-z]{2})?-->/', '', $string); 

這僅匹配你不想一部分<!--:(?:[a-z]{2})?-->其中(?:[a-z]{2})?是兩個可選的小寫字母,這意味着它將匹配兩個部分。

0

解決你的問題,你只需要一個簡單的正則表達式像<!--:(fr)?-->和PHP代碼,如:

$string = preg_replace('/<!--:(fr)?-->/', '', $string); 

要回答這個問題:\w是非常有限的,不推薦使用的快捷方式。它會例如不符合您輸入的ñ,也不符合,。 PHP對Unicode有很好的支持。快捷鍵\p{L}匹配任何語言的任何字母。還有任何標點符號等的快捷方式。這些可以組合在一個字符類中。例如。如果你想匹配至少一個字母(包括法語和西班牙語字母),以任何順序點或逗號,你可以寫:

[\p{L}.,]+ 

有關於如何在這裏工作的一些信息:

相關問題