如何在Textmate中使用多行和前瞻查找具有正则表达式的函数?

时间:2010-09-16 03:26:34

标签: regex textmate

我有一个XML文件,我需要使用parameterid命名方面(或名称字段,以Aspect为值)找到所有参数,找到参数的结尾,插入比另一个名为linewidth的类似参数(见下文)方面参数

  <parameter>
   <parameterid>aspect</parameterid>
   <name>Aspect</name>
   <valuemin>0.1</valuemin>
   <valuemax>5</valuemax>
   <value>1</value>
  </parameter>

现在,我可以使用以下代码执行此操作:

(?m:(<name>Aspect<.+?</value>.))(\t+)(</parameter>)

$1$2$3\n$2<parameter>\n$2\t<parameterid>linewidth</parameterid>\n$2\t<name>Line Width</name>\n$2\t<valuemin>0</valuemin>\n$2\t<valuemax>200</valuemax>\n$2\t<value>20</value>\n$2</parameter>

但是,我首先粘贴所有方面参数。我尝试使用(?<=,以便我可以找到aspect参数结束的位置。但是,一旦我这样做,(?m:就不起作用了。有谁知道如何让它们一起工作?只是想知道。

理想情况下,如果像这样的东西会很棒:

(?m:(?<=<name>Aspect<.+?</value>.))(\t+)(</parameter>)

提前完成。

1 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

(?m:(<name>Aspect<.+?</value>))(\s+)(</parameter>)

(\s+)捕获换行符和下一行开头的空格,因此您可能希望从替换字符串中删除所有\n\t转义符。插入的文本没有正确缩进,但正则表达式有效。