2011-10-04 76 views
1

我有一個示例字符串。合併多個REGEX語句

This should be **bold**, *indented* or ***bold and indented***. 

的字符串使用正則表達式3運行接二連三地得到以下結果分析:

This should be <b>bold</b>, <i>indented</i> or <b><i>bold and indented</i></b>. 

它的簡單和正常工作。但是,我想節省幾行(如果可能,更漂亮,更高效,那麼爲什麼不呢?),併合並它們。在單個正則表達式語句中進行所有替換。額外的效率可能嗎?或者我應該保持原樣? (即使我應該,我希望看到一個可能的解決方案?)

我匹配聲明:

  • \*\*\*(.+?)\*\*\* - ><b><i>$1</b></i>
  • \*\*(.+?)\*\* - ><b>$1</b>
  • \*(.+?)\* - ><i>$1</i>
+0

請包括您正在使用的3個正則表達式。 – Chriszuma

+0

我真的認爲它應該是非常明顯的(這不是一個noob問題),但我會添加它。 –

回答

2

老實說,將它們保存爲3個獨立的正則表達式幾乎可以肯定...

  1. 更多可讀
  2. 簡單
  3. (由於#1和#2)更易於維護。

更少的線條並不總是更好,尤其是當談到正則表達式。


此外,你只需要2個正則表達式 - 粗體和斜體。只是一直運行大膽一個第一:

***foo*** 

變,大膽的正則表達式後...

*<b>foo</b>* 

然後斜體正則表達式,使該...

<i><b>foo</b></i> 

哪個正確的輸出。 (首先運行粗體的原因是因爲斜體將匹配***,因爲<i>*</i>這是錯誤的。)

+0

雖然理論研究已經注意到了,你能否舉一個工作的例子? –

+1

不是真的,因爲基本正則表達式不允許在其替換中使用邏輯(例如,您不能說「在這些條件下替換爲該字符串,或者在這些條件下替換爲該字符串」)。有些語言具有基於回調的正則表達式替換,可以這樣做,但是您必須先指定一種語言。 – Amber

+0

已註冊並被接受。謝謝。 –