簡體   English   中英

在崇高文本 3 片段中應用 2 正則表達式操作

[英]Applying 2 regex operation in sublime text 3 snippet

我正在嘗試為 sublime text 3 制作一個片段,我想將文件名變量(TM_FILENAME)轉換為大寫並將“.c”替換為“_H”。 我有表達方式,但不是同時。

我試圖把它們放在一起,但是沒有用。

我擁有的片段文件的內容:

#ifndef ${1:${TM_FILENAME/\..+$/_H/}}
# define ${1:${TM_FILENAME}}
${1/(.*)/\U$1/\E}
$0

#endif

文件名為 test.c,結果如下:

#ifndef test_H
# define test_H
TEST_H


#endif

第三行是我想要的,但我想要在 ifndef 和定義之后。
所以我需要將第三行的正則表達式與第一行結合起來。

正如@keith-hall 在對您的問題的評論中提到的那樣,這可以通過利用 Sublime 使用boost regex 語法來匹配和提升格式字符串來創建替換文本這一事實來實現。

這暴露的功能之一是替換文本中的條件表達式的想法:

性格 '?' 開始一個條件表達式,一般形式是:

?Ntrue-expression:false-expression

其中 N 是十進制數字。

如果子表達式 N 匹配,則評估 true-expression 並將其發送到 output,否則評估 false-expression 並將其發送到 output。

這意味着對於包含在正則表達式中的每個捕獲組,您可以指定應該替換為兩個單獨的文本項; 當組捕獲一些文本時替換文本,當它沒有捕獲一些文本時替換文本。

根據您上面的問題,一個例子是這樣的:

${1:${TM_FILENAME/(\.c)|(.)/(?1_H:)(?2\u$2:)/g}}

這里的正則表達式部分是(\.c)|(.) ,它匹配文字文本.c (第 1 組)或任何單個字符(第 2 組)。

在替換文本中, (?1_H:)表示如果第一個捕獲組捕獲了任何文本,則替換它應該是文字文本_H 否則替換文本應該是一個空字符串。

之后, (?2\u$2:)表示如果捕獲組 2 捕獲了任何內容,則替換文本應該是字符的大寫版本; 否則替換應該是一個空字符串。

由於輸入正則表達式有一個交替( |字符),正則表達式匹配一個或另一個; 所以在替換文本中只有一組或另一組有任何文本,output 會相應地采取行動。

正則表達式中的選項指定g以確保將正則表達式應用於所有內容; 否則它只會匹配一次,在這種情況下會產生大寫文件名中的第一個字符然后停止的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM