开发者社区> 问答> 正文

正则表达式:帮忙看下一个正则的写法

screenshot

Html部分源码

post" action="../cmd.asp?act=SettingSav">
<div id="divMain2">

<ul>
    <li class="tabs-selected"><a href="#fragment-1"><span>基础设置</span></a></li>
    <li><a href="#fragment-2"><span>全局设置</span></a></li>
    <li><a href="#fragment-3"><span>页面设置</span></a></li>
    <li><a href="#fragment-4"><span>静态目录配置及文件重建设置</span></a></li>
    <li><a href="#fragment-5"><span>UBB设置及相关转换</span></a></li>
    <li><a href="#fragment-6"><span>WAP设置</span></a></li>
</ul>
<div class="tabs-div" style='border:none;padding:0px;margin:0;' id="fragment-1"><table width='100%' style='padding:0px;margin:1px;' cellspacing='0' cellpadding='0'><tr><td style='width:32%'><p  align='left'>·BLOG的地址</p></td><td style="width:68%"><p><input id="edtZC_BLOG_HOST" name="edtZC_BLOG_HOST" style="width:95%" type="text" value="http://xxxxx.com/" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·BLOG的名称</p></td><td style="width:68%"><p><input id="edtZC_BLOG_NAME" name="edtZC_BLOG_NAME" style="width:95%" type="text" value="你的Blog名称" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·BLOG的简介</p></td><td style="width:68%"><p><input id="edtZC_BLOG_SUB_NAME" name="edtZC_BLOG_SUB_NAME" style="width:95%"  type="text" value="欢迎使用Z-Blog,有问题或意见请<p  align='left'>·WEB编辑器<p>可设为fckeditor等,为空值则不启用WEB编辑</p></p></td><td style="width:68%"><p><input id="edtZC_BLOG_WEBEDIT" name="edtZC_BLOG_WEBEDIT" style="width:95%" type="text" value="fckeditor" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·允许上传文件的类型<p>以|做为分隔</p></p></td><td style="width:68%"><p><input id="edtZC_UPLOAD_FILETYPE" name="edtZC_UPLOAD_FILETYPE" style="width:95%" type="text" value="jpg|gif|png|jpeg|bmp|psd|wmf|ico|rpm|deb|tar|gz|sit|7z|bz2|zip|rar|xml|xsl|svg|svgz|doc|xls|wps|chm|txt|pdf|mp3|avi|mpg|rm|ra|rmvb|mov|wmv|wma|swf|fla|torrent|zpi|zti" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·上传文件的最大字节数</p></td><td style="width:68%"><p><input id="edtZC_UPLOAD_FILESIZE" name="edtZC_UPLOAD_FILESIZE" style="width:95%" type="text" value="10485760" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·上传附件按"年/月"目录保存</p></td><td style="width:68%"><p><input id="edtZC_UPLOAD_DIRBYMONTH" name="edtZC_UPLOAD_DIRBYMONTH" style="" type="checkbox"  value="False" class="pointer" ONCLICK="ChangeValue(this);"/></p></td></tr><tr><td style='width:32%'><p  align='left'>·启用RSS的全文输出/p></td><td style="width:68%"><p><input id="edtZC_COMMENT_COUNT_WAP" name="edtZC_COMMENT_COUNT_WAP" style="width:95%" type="text" value="3" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·WAP文章列表分页页码条长度</p></td><td style="width:68%"><p><input id="edtZC_PAGEBAR_COUNT_WAP" name="edtZC_PAGEBAR_COUNT_WAP" style="width:95%" type="text" value="5" /></p></td></tr><tr><td style='width:32%'><p  align='left'>·WAP单页文章文字数</p></td><td style="width:68%"><p><input id="edtdth:68%"><p><input id="edtZC_WAPCOMMENT_ENABLE" name="edtZC_WAPCOMMENT_ENABLE" style="" type="checkbox"  value="False" ONCLICK="ChangeValue(this);"/></p></td></tr></table></div><p style='display:none;'>·当前Z-Blog程序版本 :</p><p style='display:none;'><input id="edtZC_BLOG_VERSION" name="edtZC_BLOG_VERSION" style="width:95%" type="text" value="1.8 Walle Build 100427" readonly/></p><p><br/><input type="submit" class="button" value="提交" id="btnPost" onclick='' /></p>

 </div></form></div>
<script language="javascript">

需求
获取设置信息的key-value以及id
比如(图片中的第一行)
Key:Blog的地址
value:http://xxxxx.com
id:edtZC_BLOG_HOST

对应的正则表达式

<p\s+align='left'>(?<key>.*?)</p>.*?id=\"(?<id>.*?)\".*?value=\"(?<value>.*?)\"

出现的问题
以上正则表达式会跳过标签为:textarea的内容(上图的倒数第二行)
所以,会出现以下结果:
key:BLOG版权说明可以放置备案号和统计代码,支持HTML代码,可用“br”标签换行
value:拥有者(匹配到最后一行)
id:edtZC_BLOG_COPYRIGHT

展开
收起
落地花开啦 2016-06-16 15:53:40 3037 0
2 条回答
写回答
取消 提交回答
  • 请使用xpath 或者 BeautifulSoup4 python包

    2019-07-17 19:41:09
    赞同 展开评论 打赏
  • 喜欢技术,喜欢努力的人

    很简单,<input>的内容是在标签上边的value=""属性中的,<textarea>的内容是在标签里边用括住的。你的正则表达式只能适应一种目的。

    另外求你别用正则这么分析HTML内容,因为源稍微一改就要疲于奔命改匹配,会死的。

    好好的用一个HTML解析库,例如Python/Py3K的BeautifulSoup4。

    另外无论是用正则凑合,还是真的用HTML解析库,都一个必要注意的问题:必须分解步骤,不要试图一次找准。必须先把表格分解成每一行(<tr>...</tr>),然后在行内再做详细的查找。这样起码在出问题的时候,把问题能够约束在当前行之内,不会1行解析有问题就“牵一发而动全身”。

    2019-07-17 19:41:09
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载