2012-11-16 110 views
0

我有一大堆的文字,例如:大括號正則表達式匹配產生太多結果

foofoofooabcdefhjkldh389dn{pdf}images/1.pdf,100%,500{/pdf}hfnkjt8499duidjglkj 

我想提取以下內容:

{pdf}images/1.pdf,100%,500{/pdf} 

所以這裏有一個正則表達式我做:

#{pdf}(.*?){/pdf}# 

當檢查結果我回去:

Array 
(
[0] => {pdf}images/1.pdf,100%,500{/pdf} 
[1] => images/1.pdf,100%,500 
) 

我預計只會得到數組中的第一個項目,而是有兩個項目。 我正在使用PHP並進行測試我使用以下網站:PHP Regex Tester

我該如何才能獲得文本?

回答

3

你在你的正則表達式使用一組。你的情況是組

(.*?) 

這將導致PHP給你完整的結果{} PDF {sometext/PDF}和sometext爲第一組中找到。

只是嘗試以下襬脫組:

#{pdf}.*?{/pdf}# 
1

使用非捕獲組,以確保中央文本不顯示爲所述陣列中的反向引用,並使用零點寬度的斷言,以確保{pdf}部分不匹配的一部分:

#(?<={pdf})(?:.*?)(?={/pdf})# 

如果你想保持{pdf}分隔符:

#{pdf}(?:.*?){/pdf}# 
1

你不必twor結果。

這裏的問題(這不是問題)可能是使用了一個函數preg_match。該函數返回整個匹配查詢,即{pdf}images/1.pdf,100%,500{/pdf}以及最終結果,即images/1.pdf,100%,500

所以你只需要使用$result[1]進一步解析。