2012-08-29 38 views
1

我正在嘗試查找與文本中的某些自定義標記匹配的正則表達式。標籤總是有格式[! - sometext--]或[! - sometext:param1--],[! - sometext:param1:param2--]。我需要做的是將「sometext」部分和可選參數單獨作爲「param1:param2」或「param1」和「param2」(無關緊要)。用於查找自定義標記的正則表達式

我對沒有標籤的PARAMS方法是

\[!--(.+?)--\]

但我怎麼在一個優雅的方式PARAMS部分匹配嗎?

回答

1

更新:好的,第三次應該是魅力吧? ;-)這在我的Perl腳本示例中適用。

這應該這樣做(和我假設一個兼容的Perl REG-EX ...你不指定什麼語言你在寫這篇):

\[!--([^\]:]+):?([^\]-]+?)?--\] 

這是怎麼回事?

  1. 首先,我們匹配[!--
  2. 然後,我們就什麼,這不是一個:]
  3. 然後做一個匹配(和捕獲),我們匹配一個可選結腸
  4. 然後我們有一個可選的,非貪婪匹配(並捕獲)任何不是-](這應該一次捕獲所有可選參數)
  5. 然後我們通過匹配--]

您需要拆分:上的可選參數以捕獲可能存在多個參數的情況。

+0

我有類似的東西,但隨後 '胡說[! - disclaimer_vat--] blupp [! - disclaimer_vat - ]' 會產生一個匹配 'disclaimer_vat--] blupp [ ! - disclaimer_vat'由於貪婪。 – smares

+0

我認爲以下作品: '/\[!--(.+?)(?:\:(.+?))??\\\/ – smares

+0

我將它改爲非貪婪變體。看看是否適合你。我想你也可以確保在最終捕獲的匹配中不會碰到結尾的']':'([^ \] - ] +?)?' –