让内容替换支持正则的小修改,修改前记得备份
效果如图:
extend/net/Gather.php
... //规则采集 static public function field_rule($field_params, $html, $is_loop = false) { $field_params['rule'] = self::convert_sign_match($field_params['rule']); $field_params['merge'] = self::set_merge_default($field_params['rule'],$field_params['merge']); if(!empty($field_params['chapter'])){ $field_params['rule']=str_replace('[章节标题]','(?P<title>[\s\S]*?)',$field_params['rule']); } if (!empty($field_params['rule']) && preg_match_all('/' . self::$sign_match . '/i', $field_params['merge'], $match_signs)) { if ($is_loop) { preg_match_all('/' . $field_params['rule'] . '/i', $html, $match_conts, PREG_SET_ORDER); } else { if (preg_match('/' . $field_params['rule'] . '/i', $html, $match_cont)) { $match_conts = [$match_cont]; } } $curI = 0; if(!empty($match_conts)){ foreach ($match_conts as $match_cont) { $curI++; $re_match = []; foreach ($match_signs['num'] as $ms_k => $ms_v) { $re_match[$ms_k] = $match_cont['match' . $ms_v]; } $contVal = str_replace($match_signs[0], $re_match, $field_params['merge']); if(!empty($field_params['strip'])){ if(strpos($field_params['strip'],'all') !== false){ $contVal = self::strip_tags_content($contVal,'style,script,object'); $contVal = strip_tags($contVal); } else { $contVal = self::strip_tags_content($contVal,$field_params['strip']); } } if(!empty($field_params['replace'])){ if(!is_array($field_params['replace'])){ $field_params['replace']=json_decode($field_params['replace'],true); } foreach ($field_params['replace'] as $key => $value) { // 根据 isregex判断是否正则 if (!empty($value['isregex'])){ try { $contVal = preg_replace('/'.$value['find'].'/i', $value['replaces'], $contVal); }catch (Exception $e){ Log::info("正则替换失败,使用普通替换 ". $e->getMessage()); $contVal = str_replace($value['find'], $value['replaces'], $contVal); } }else{ $contVal = str_replace($value['find'], $value['replaces'], $contVal); } } } if ($is_loop) { if(!empty($field_params['chapter'])){ $val[] = ['title'=>$match_cont['title'],'url'=>$contVal]; }else{ $val[] = trim($contVal); } } else { $val= trim($contVal); } } return $val; } } } ...
public/admin/js/collect.js
... form.on('submit(replace)', function(data){ var index=$('[name="index"]').val(); var reindex=$('[name="reindex"]').val(); var replace_data={"find":$('[name="replace[find]"]').val(), "replaces":$('[name="replace[replaces]"]').val(), "isregex":data.field["replace[isregex]"]==null?'':'1'}; if(parent.$('[name="rule['+index+'][replace]"]').val()){ var field_replace=JSON.parse(parent.$('[name="rule['+index+'][replace]"]').val()); }else{ var field_replace=[]; } if(reindex){ field_replace[reindex]=replace_data; }else{ field_replace.push(replace_data); } laytpl(parent.$('#replace').html()).render({"field_index":index,"list":field_replace}, function(html){ parent.$('#replace_'+index+'_view').html(html); }); parent.$('[name="rule['+index+'][replace]"]').val(JSON.stringify(field_replace)); var layer_index = parent.layer.getFrameIndex(window.name); parent.layer.close(layer_index); }); ...
application/admin/view/collect/field_replace.html
... <form class="layui-form" lay-filter="replace_form" action="{:url()}"> <div class="layui-form-item"> <label class="layui-form-label">目标</label> <div class="layui-input-block"> <textarea name="replace[find]" placeholder="替换目标" class="layui-textarea"></textarea> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">替换</label> <div class="layui-input-block"> <textarea name="replace[replaces]" placeholder="替换内容" class="layui-textarea"></textarea> </div> </div> // 添加一个checkbox <div class="layui-form-item"> <label class="layui-form-label">正则</label> <div class="layui-input-block"> <input type="checkbox" name="replace[isregex]" lay-skin="primary"/> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <input name="index" type="hidden" value="{$index|default=""}" /> <input name="reindex" type="hidden" value="{$reindex|default=""}" /> <button class="layui-btn" lay-submit lay-filter="replace" type="submit">提交</button> </div> </div> </form> ...
application/admin/view/collect/edit.html
查找 “内容替换”、“编辑替换”,把同一行内的 lay-size="600,347" 改为 lay-size="600,400" 同样位置附近的 <colgroup> <col> <col> <col width="250"> </colgroup> 改为 <colgroup> <col> <col> <col width="80"> <col width="250"> </colgroup> 同样位置附近的 <tr> <th>目标</th> <th>替换</th> <th><div align="center">操作</div></th> </tr> 改为 <tr> <th>目标</th> <th>替换</th> <th>正则</th> <th><div align="center">操作</div></th> </tr> 这里也可以不做修改,不影响功能
ieehee
发表于 2022-4-14
666666666,感谢大佬分享
评论列表
加载数据中...
yuji
发表于 2022-11-18
试了好像没有用哎
评论列表
加载数据中...
xixi
发表于 2022-11-20
yuji
2022-11-18
试了好像没有用哎
我试了也没有用
评论列表
加载数据中...