2016-04-18 16 views
-1

我使用TextMate替換表達式[my_expression],其中包含開放和封閉括號之間的字符{my_expression};所以我想通過在TextMate問題中用反向引用替換

{$1} 

正則表達式正確的表達式匹配替換

\[[^]]*\] 

,但更換給人{$1},使變量無法識別。有人有想法嗎?

+0

而且代你忘了逃跑的字符,使用'\ [[^ \]] * \]'。您還需要一個捕獲組,所以使用'\ [([^ \]] *)\]' – Druzion

+0

轉義']'不需要,儘管 – rock321987

+0

您可以簡化您的正則表達式爲\ [(。*?)\]。該?在*之後使它不貪婪,因爲我[^]]對於眼睛是有點困難的......並且是的,你需要()來指定一個TextMate可以識別的捕獲組 – karina

回答

2

你忘了逃跑的字符,[^]]應該是[^\]]。您還需要一個捕獲組。 $1back-referencing1st捕獲組,和你沒有捕捉組,所以使用正則表達式如下:

\[([^\]]*)\] 

這增加了周圍[^\]]*(),所以[]內捕獲數據。欲瞭解更多信息,請參閱Capture Groups


此頁然而,這正則表達式是短:

\[(.*?)\] 

{$1}

Live Demo on Regex101

1

使用捕獲組(...)

\[([^\]]*)\] 

$1是一個反向引用附帶[...]文本。

這裏是regex demoNumbered Backreferences

此外,TextMate docs

1的語法元素
    (...)

20.4.1捕獲
要引用的捕獲,使用$n其中n是捕獲註冊號。使用$0意味着整個比賽。

而且也:

  • 如果你想使用[-]作爲一個字符類普通字符,你應該\逃避這些字符。
相關問題