正则表达式根据vqmod xml

时间:2015-06-27 10:11:29

标签: regex opencart vqmod

好的,我正在为opencart创建一个vqmod扩展,我需要在管理页面中添加一个字段。管理页面有一个带有bootstrap元素的表单,如下所示:

<div class="form-group">
  <label class="col-sm-2 control-label" for="input-keyword"><span data-toggle="tooltip" title="<?php echo $help_keyword; ?>"><?php echo $entry_keyword; ?></span></label>
  <div class="col-sm-10">
    <input type="text" name="keyword" value="<?php echo $keyword; ?>" placeholder="<?php echo $entry_keyword; ?>" id="input-keyword" class="form-control" />
    <?php if ($error_keyword) { ?>
    <div class="text-danger"><?php echo $error_keyword; ?></div>
    <?php } ?>
  </div>
</div>
<div class="form-group">
  <label class="col-sm-2 control-label" for="input-bottom"><span data-toggle="tooltip" title="<?php echo $help_bottom; ?>"><?php echo $entry_bottom; ?></span></label>
  <div class="col-sm-10">
    <div class="checkbox">
      <label>
        <?php if ($bottom) { ?>
        <input type="checkbox" name="bottom" value="1" checked="checked" id="input-bottom" />
        <?php } else { ?>
        <input type="checkbox" name="bottom" value="1" id="input-bottom" />
        <?php } ?>
        &nbsp; </label>
    </div>
  </div>
</div>
<div class="form-group">
  <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
  <div class="col-sm-10">
    <select name="status" id="input-status" class="form-control">
      <?php if ($status) { ?>
      <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
      <option value="0"><?php echo $text_disabled; ?></option>
      <?php } else { ?>
      <option value="1"><?php echo $text_enabled; ?></option>
      <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
      <?php } ?>
    </select>
  </div>
</div>

我需要告诉我的vqmod XML在“input-bottom”表单组之前添加一个表单组。我可以这样做:

<search position="before"><![CDATA[<div class="form-group">
            <label class="col-sm-2 control-label" for="input-bottom"]]></search>

但这看起来非常脆弱。如果标签类被更改或任何东西,它就会中断。那么有没有一种方法可以使用正则表达式或其他东西在“输入底部”标签之前找到<div class="form-group">,而不管div和标签的“for”属性之间的HTML是什么?

或者我看到这一切都错了?有没有更好的方法来做我想做的事情?我是opencart和vqmod的新手。

1 个答案:

答案 0 :(得分:0)

所以我在stackoverflow上发现这个post帮助我理解了前瞻中的否定集,并且在同一篇文章中使用了这个链接,我用这个online tester测试了这个正则表达式:

<div class="form-group">(?=[^\>]*?bottom)

只要单词&#34; bottom&#34;匹配<div class="form-group">出现在下一个>符号之前。这是关于我能想到的最好的。

然后我去了vqmod尝试它并注意到它没有工作......仔细检查vqmod的文档后,我了解到它只能搜索一行。 ..

但使用&#34;偏移&#34; vqmod中的属性,我能够做到这一点:

<search position="before" offset="1"><![CDATA[for="input-bottom"]]></search>
<add><![CDATA[my code]]></add>

它搜索具有输入底部的行,并将我的代码放在其上方2行,跳过<div class="form-group">行。那对我有用。