我在编写通用正则表达式时遇到问题,这将帮助我从输入文本中清除不需要的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。上面一行中提到的答案表明正则表达式可以跨越多行,但在我的情况下不会发生这种情况。
答案 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;