2012-07-19 64 views
1

我想構建一個preg_match_all,以便可以使用該數組,但問題是我無法優化我的正則表達式來工作。preg_match_all兩個標記之間的正則表達式值

一個例子的輸入將是:

#|First Name|# 
This text shouldn't be caught 
#|Second Value|# 

名字值和第二值都應該在數組中。

這是我已經試過:

preg_match_all('/\#\|(.*?)\|\#\]/',$html, $out); 

preg_match_all ("/^#\|*\|#*$/i", $html, $out); 
+0

它不? var_dump($ out)爲第一個正則表達式顯示了什麼?如果你從第一個正則表達式中刪除了'\]',那麼怎麼辦? – Palladium 2012-07-19 21:23:45

回答

1

首先是正確的,它僅包含\]接近尾聲這打破了你想要的。使用

/\#\|(.*?)\|\#/ 

確實給我正確的結果,在$out[1]匹配。不應該需要

preg_match_all('/#\|(.*?)\|#/', $html, $out); 

逃離#:

+0

哇多麼愚蠢的錯誤:$感謝清理它。 – 2012-07-19 21:26:45

1

試試這個正則表達式:

/\#\|(.*?)\|\#/ 
0

嘗試。要指定#之間沒有#,你也可以使用

preg_match_all('/#\|([^#]*)\|#/', $html, $out); 
0

有幾件事,你需要添加'。'在你的酒吧之間的字符。這個字符意味着匹配任何字符,沒有它你說匹配零或更多'|'字符。您還需要爲多行匹配添加m修飾符。

/^#\|.*\|#$/im 
+0

您忘記了捕捉表達式(。*)。此外,我的標誌是多餘的,因爲在正則表達式中沒有區分大小寫的字符。 – LSerni 2012-07-19 21:28:38

相關問題