如何扩展我的Perl正则表达式以删除匹配模式,即使它们之间存在换行符

时间:2017-02-01 12:43:39

标签: regex perl

我在编写通用正则表达式时遇到问题,这将帮助我从输入文本中清除不需要的HTML属性。 我的输入看起来像这样

<p data-bind="XYZ" style="text-align: center;">Untitled Template1 - art</p>
<p><select data-bind="
            options:options,
            optionsText: 'value',
            optionsValue: 'id',
            value: value,
            optionsCaption:'Please select',
            attr: { id: 'select'+id }"><option style="text-align: center;" value="8661"></option><option value="8662"></option></select></p>

我已将这两个字符串都推送到数组中。我正在循环数组并清除data-bind属性。

foreach my $row ( @$results ) {
    $value =~ s/\sdata-bind=".*?"//g;
}

结果如下所示:

<p style="text-align: center;">Untitled Template1 - art</p>
<p><select data-bind="
            options:options,
            optionsText: 'value',
            optionsValue: 'id',
            value: value,
            optionsCaption:'Please select',
            attr: { id: 'select'+id }"><option style="text-align: center;" value="8661"></option><option value="8662"></option></select></p>

如何从第二个字符串中消除data-bind属性。任何人都可以帮忙。 我搜索了Stackoverflow,发现用户问同一个question。上面一行中提到的答案表明正则表达式可以跨越多行,但在我的情况下不会发生这种情况。

1 个答案:

答案 0 :(得分:1)

my $str = "<p data-bind=\"XYZ\" style=\"text-align: center;\">Untitled Template1 - art</p>
<p><select data-bind=\"
        options:options,
        optionsText: 'value',
        optionsValue: 'id',
        value: value,
        optionsCaption:'Please select',
        attr: { id: 'select'+id }\"><option style=\"text-align: center;\" value=\"8661\"></option><option value=\"8662\"></option></select></p>";
  

如果您在多行替换中使用,则应使用s修饰符。

    $str=~s/\sdata-bind=".*?"//gs;

    print $str;