今天给别人修改一个项目,我相这是程序员同志们最烦的事情啦,特别是在别人设计不合理,代码书写不规范的情况下,更是痛不欲生,很不幸这个项目就是一个失败中的典型,废话少说,言归正传,因为数据库设计不合理的原因,所以必须要在前台新闻字段(也就是text类型,通过新闻编辑器向里插入的html代码)取出第一个图片的图片路径,实现方法有两种,一种是可能sql的字符串函数来获取,当然还有一种最为方便、简单、快捷的方法,那就是通过.net的正则表达式。
方法一 sql法
因为这是个项目是修改项目,所以很多东西不能动原有的代码,所以在获取新闻字段图片的时候只有用第一种sql的方式,但这样做可大大降低查询的效率,特别是在数据量大的时候,会出现很大问题,不过不幸中的万幸是这个项目的数据量不会太多,经多次调试终于写出了一个相对比较不容易出错的sql语句:

select substring(substring(substring((substring((convert(char(1000),brief)),(charindex('<img',(convert(char(1000),brief)),0)),1000)),0,1000),(charindex('src=',(substring((convert(char(1000),brief)),(charindex('<img',(convert(char(1000),brief)),0)),1000)),0))+5,1000),0,(charindex('"',substring(substring((substring((convert(char(1000),brief)),(charindex('<img',(convert(char(1000),brief)),0)),1000)),0,1000),(charindex('src=',(substring((convert(char(1000),brief)),(charindex('<img',(convert(char(1000),brief)),0)),1000)),0))+5,1000),0)))from hotel
写完之后一看眼睛都花了,思路是这样的:
先从新闻字段的中获取第一个"<img"标签的位置并取其后的字符串,以保证当前标签就是图片
(假如字段值是<p><img alt="" src="1.jpg"><table>……</p>,在第一次裁取之后只剩下<img alt="" src="1.jpg"><table>……</p>),
再从取出后的字符串获取"src="标签的位置并取其后的字符串,以确定后一个字符开始就是图片的路径了
(裁取之后的内容为:1.jpg"><table>……</p>)
现在要做的就是裁掉“"”之后的字符串
(于是就得出1.jpg)
虽然图片是获取出来了,但我对其速度相当的不满意,在此希望高人指点一二,如何更高速有效的通过sql获取其字段的图片路径。
方法二:.net 正则表达式法
当然这一种方法没得说,.No1,

//取出图片路径
MatchCollection mc;
Regex r = new Regex(@"<img.*?src=(?:""|')?(.*?\.(?:jpg|gif)).*?");
mc = r.Matches("这里填写你要找的HTML代码 赋值给一个字符串");
for(int i = 0;i<mc.count;i++)
{
//mc[i]就是图片路径了
}
当然这个正则表达式也可能存一些或大或小的bug,希望大家多多指点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?