什么是正则表达式?

时间:2012-12-12 07:44:46

标签: xml regex vim

我有一个我手动编辑的xml文件。 xml文件结构如下:

<order>
    <id>1</field>
    <current_execution_status>REGENERATED</field>
    <generated_time>2012-12-01 17:55:00</field>
    <generation_status>UNKNOWN</field>
    <priority>0</field>
    <type>NORMAL</field>
    <assigned_vehicle>1</field>
    <assigned_drop_location>1</field>
    <assigned_pick_location>1</field>
    <generation_by_user_name>ABC</field>
    <material>1</field>
    <order_cancel_detail />
    <order_drop_detail />
    <order_pick_detail />
</order>

我想从值前面用相应的“字段名称”替换每次出现的field。对于例如<id>1</field>应该像这样<id>1</id><current_execution_status>REGENERATED</current_execution_status>等。但是在vim中没有得到我的正则表达式。

2 个答案:

答案 0 :(得分:4)

:%s/<\([^<>]*\)>\([^<>]*\)<\/field>/<\1>\2<\/\1>/

答案 1 :(得分:2)

这个怎么样:

:%s/<\(.*\)>\(.*\)<\/field>$/<\1>\2<\/\1>/

有关Vim regexp的注意事项:

  1. 使用\(和')'捕获/分组,而不是'(',')'。 ('(',')')只是意味着 打开/关闭parens的实际字符。
  2. 捕获内存为\1\2等。
  3. /需要像往常一样进行转义\/