如何用自己和更多替换匹配的所有实例?红宝石

时间:2016-10-14 03:01:55

标签: php ruby regex

好的,所以说我在HTML文件中有一堆input,如下所示:

<input class="form-control" type="text" id="ogwb">
<input class="form-control" type="text" id="aosgh">
<input class="form-control" type="text" id="aghw">

如何将id s的所有实例替换为自己以及具有相同name值的valueid属性,如下所示:

<input class="form-control" type="text" id="ogwb" name="ogwb" value="<?php echo htmlspecialchars($_POST['ogwb']); ?>">
<input class="form-control" type="text" id="aosgh" name="aosgh" value="<?php echo htmlspecialchars($_POST['aosgh']); ?>">
<input class="form-control" type="text" id="aghw" name="aghw" value="<?php echo htmlspecialchars($_POST['aghw']); ?>">

这是我尝试过的:

f = File.read('my.html')
$arr = f.scan(/id="([^"]*)"/)

$arr.each{ |a|
    e_ = a.join(", ")+'"'
    e__ = a.join(", ")+'"'+' name="'+a.join(", ")+'" value="<?php echo htmlspecialchars($_POST['+"'"+a.join(", ")+"'"+']); ?>"'
    f.gsub(/#{e_}/,e__)
}

如果我puts e_puts e__,我会得到匹配并替换我想要的,但gsub似乎无效。

1 个答案:

答案 0 :(得分:1)

您需要使用正则表达式来抓住这个:

<input class="form-control" type="text" id="([^"]+)">

请注意,我用捕获组(括号)包围了id的文本值。这是捕获组#1。

您可以使用\1访问第一个捕获的组。

因此,您希望搜索以获取之前的正则表达式,并替换以下内容:

<input class="form-control" type="text" id="\1" name="\1" value="<?php echo htmlspecialchars($_POST['\1']); ?>">

示范:https://regex101.com/r/qeHkmg/1

文档:http://www.regular-expressions.info/replacebackref.html