2010-08-13 18 views
1

我想要得到一個正則表達式,它能夠在字符串中找到以下部分。找到這個複雜的元素正確的PHP正則表達式

[TABLE|head,border|{ 
#TEXT|TEXT|TEXT# 
TEXT|TEXT|TEXT 
TEXT|TEXT|TEXT 
TEXT|TEXT|TEXT 
}] 

它從一個簡單的自制WYSIWYG編輯器,它可以添加表的可能性。但是表格的「語法」應該像上面那樣簡單。

不,因爲可以有很多這些表定義,我需要找到所有與PHP的preg_match_all以替換它們與html中衆所周知的<table>標記。

正則表達式IAM試圖使用如下:

/\[TABLE\|(.*)\|\{(.*)\}\]/si 

\x0A停留的換行符爲我的應用程序運行在Linux上,這是足夠的(正常工作與簡單的正則表達式)。

我在functions-online.com上使用在線正則表達式測試儀。

它得到的匹配並不真正有用。如果我有一個以上的TABLE定義,那麼這些匹配是完全無用的。由於(。*)涵蓋了從「頭部,邊界」到最後一個「|」的所有內容,第二個TABLE定義中的字符。

我想獲得一個一個給我完整的表命令的比賽列表。

+0

我現在不能玩它,但如果你在Windows上,你應該嘗試使用http://www.weitz.de/regex-coach/來處理正則表達式。 – Fanis 2010-08-13 10:08:52

回答

2

這是因爲默認情況下。*將是一個貪婪的匹配,假設您的代碼對於只包含單個值的輸入正確工作。在兩者之後放置一個問號。*應該防止貪婪成爲問題。

/\[TABLE\|(.*?)\|\{(.*?)\}\]/si 
+0

哦,我的上帝,它只是缺失的問號? 它的工作。 因2個字符而丟失時間。 8 | 非常感謝Cags。 – NovumCoder 2010-08-13 10:15:18