2011-08-17 75 views
-1

我需要一個php的正則表達式,輸出<!--:en--><!--:-->之間的所有內容。 因此對於<!--:en-->STRING<!--:-->它只會輸出STRING需要2組字符之間的php正則表達式

編輯:噢,下面<!--:--> nedds是<!--:en-->後的第一個becouse有更多的文字..

+5

到目前爲止,您嘗試過哪些方法?您卡在哪裏?向我們展示您的代碼 - 我們將指出需要更改的內容。 –

+0

我沒有得到任何代碼,因爲我吸吮正則表達式:) – Milivoj

+0

要添加代碼,只需選擇文本並單擊圖標與父母或ctrl + k在Windows上,我已經解決了這個問題 –

回答

4

你想要的其實並不是太複雜:

/<!--:en-->(.*?)<!--:-->/gi 

你的比賽將在捕獲組1

說明:

.*?是一個懶惰的量詞。基本上,它意味着「保持匹配,直到找到仍然適合此模式的最短字符串」。這將導致匹配在第一個實例<!--:-->處停止,而不是直到文檔中的最後一個<!--:-->

如果我正確記得我的PHP,那麼用法就像preg_match("/<!--:en-->(.*?)<!--:-->/gi", $input)

-1

如果你只是輸入

$input = '<!--:en-->STRING<!--:-->'; 

您可以

嘗試
$output = strip_tags($input); 
+0

是啊,那不會工作,我得到< !--:en-- >和< !--:de-- >,所以它會將它們全部剝離... – Milivoj

-3

嘗試:

^< !--:en-- >(.*)< !--:-- >$ 

我不認爲任何其他角色需要轉義。

+0

試圖,但沒有結束分隔符'^'錯誤 – Milivoj

+1

OP沒有指定該字符串是整行;實際上他特別指出在投入中有不止一種這樣的模式。你的模式在至少三種方式上是錯誤的:要求整個字符串匹配,需要標籤內的空格,並使用貪婪的'。*'作爲一個匹配消耗到最後一個結束標記的所有路徑,即使沒有'^$'。 –

-3
<!--:en--\b[^>]*>(.*?)<!--:--> 

這將匹配你的標籤之間的事。這將打破,如果你嵌套你的標籤,但你沒有說你這樣做,是:)

+0

試過,但得到一個未知的修飾符']'錯誤 – Milivoj

+0

這是行不通的。首先,在'-'之後沒有單詞邊界,除非緊跟着一個單詞字符(匹配'\ w +';其次,在第二個標籤中有一個額外的'/',在要求中沒有'/' –

+0

刪除了額外的正斜槓,只是用於html標籤,它適用於html標籤之間的所有文本,它應該可以很好地搜索這些標籤。 – Jim