VIM 正则表达式捕获组什么也没捕获
VIM regex capture group catches nothing
我正在使用 vim 解析一些文件,想更改以下代码的格式。
原始格式:
vmm_note(log, "TEST_DIR - BEGIN");
所需格式:
uvm_info("Test_seq", "TEST_DIR - BEGIN",UVM_LOW);
当此代码只有一行时,以下正则表达式起作用。
%s/vmm_note(log,\(.*\));/uvm_info("Test_seq",,UVM_LOW);/gc
然而,当代码由多行组成时,我的正则表达式可以匹配模式,但在替换中,</code> 组什么都不包含。</p>
<p>原始格式:</p>
<pre><code>vmm_note(log, $psprintf("INFO: setting debug port to watch %0s",
(req_info.debug_which==4'd0) ? "MC" :
"LZHI"));
正则表达式:
%s/vmm_note(log,\(\_.\)\{-};/uvm_info("Test_seq",,UVM_LOW);/g
结果:
uvm_info("Test_seq",),UVM_LOW);
我想知道为什么捕获组中不包含任何内容?
在此先感谢您的帮助!
尝试
%s/vmm_note(log,\(\_[^;]*\));/uvm_info("Test_seq",,UVM_LOW);/gc
希望这对您有所帮助,
你很接近,而不是 \(\_.\)\{-};
使用 \(\_.\{-}\);
将所需的文本包含在捕获组中。所以多行替换变成:
%s/vmm_note(log,\(\_.\{-}\);/umv_info("Test_seq",,UVM_LOW);/g
示例输入:
vmm_note(log, $psprintf("INFO: setting debug port to watch %0s",
(req_info.debug_which==4'd0) ? "MC" :
"LZHI"));
输出:
umv_info("Test_seq", $psprintf("INFO: setting debug port to watch %0s",
(req_info.debug_which==4'd0) ? "MC" :
"LZHI"),UVM_LOW);
我正在使用 vim 解析一些文件,想更改以下代码的格式。
原始格式:
vmm_note(log, "TEST_DIR - BEGIN");
所需格式:
uvm_info("Test_seq", "TEST_DIR - BEGIN",UVM_LOW);
当此代码只有一行时,以下正则表达式起作用。
%s/vmm_note(log,\(.*\));/uvm_info("Test_seq",,UVM_LOW);/gc
然而,当代码由多行组成时,我的正则表达式可以匹配模式,但在替换中,</code> 组什么都不包含。</p>
<p>原始格式:</p>
<pre><code>vmm_note(log, $psprintf("INFO: setting debug port to watch %0s",
(req_info.debug_which==4'd0) ? "MC" :
"LZHI"));
正则表达式:
%s/vmm_note(log,\(\_.\)\{-};/uvm_info("Test_seq",,UVM_LOW);/g
结果:
uvm_info("Test_seq",),UVM_LOW);
我想知道为什么捕获组中不包含任何内容?
在此先感谢您的帮助!
尝试
%s/vmm_note(log,\(\_[^;]*\));/uvm_info("Test_seq",,UVM_LOW);/gc
希望这对您有所帮助,
你很接近,而不是 \(\_.\)\{-};
使用 \(\_.\{-}\);
将所需的文本包含在捕获组中。所以多行替换变成:
%s/vmm_note(log,\(\_.\{-}\);/umv_info("Test_seq",,UVM_LOW);/g
示例输入:
vmm_note(log, $psprintf("INFO: setting debug port to watch %0s",
(req_info.debug_which==4'd0) ? "MC" :
"LZHI"));
输出:
umv_info("Test_seq", $psprintf("INFO: setting debug port to watch %0s",
(req_info.debug_which==4'd0) ? "MC" :
"LZHI"),UVM_LOW);