易语言取域名这件事,本质上就是把一条完整的网址拆开,去掉“http://”或“https://”协议头,再切掉路径、参数和锚点,只留下站点主机名那一段。大多数场景下,用正则表达式或者“取文本左边”配合“寻找文本”就能干净利落地拿结果,先搞懂原理,再封装成函数,之后写采集程序、做页面跳转白名单都省事。
易语言取域名怎么写?先分清三种场景
易语言里处理域名,没有统一的“系统命令”能一键搞定,因为网址格式千变万化,有的带协议头,有的不带;有的带端口,有的带路径;浏览器里的当前网址和网页源码里的链接,又是两种完全不同的获取途径,多数易语言初学者遇到的第一个困惑就是:手里什么都没有,到底从哪拿域名?
从网址字符串里提取域名,最基础的写法
写采集程序时,经常拿到类似 https://www.baidu.com/s?wd=关键词 这样的完整URL,新手最容易上手的办法是分割文本:
.版本 2 .子程序 分割取域名, 文本型 .参数 网址, 文本型 .局部变量 数组, 文本型, , "0" 数组 = 分割文本(网址, "/", ) 返回 (数组[3])
易语言的数组下标从1开始,按 分割后,https://www.baidu.com/s 会被拆成 https:、空文本、www.baidu.com、s 四段,第三段就是域名,注意第二段是个空文本,因为 中间没有内容,这种方式简单直接,但缺点很突出:如果网址不带 https:// 前缀,比如直接给 www.baidu.com/s?wd=1,分割后的第二段才是域名,数组下标就错了。
更稳妥的做法是先把协议头删掉,再取第一个 左边的文本,逻辑上先处理协议,再处理路径和参数,这样对带不带协议头的网址都有效,也是目前易语言社区里比较通用的写法。
从超文本浏览框和IE控件里拿当前域名
做浏览器工具(比如网址导航、防沉迷插件、内嵌网页工具)时,要取用户当前正在浏览的域名,易语言的超文本浏览框控件有个“地址”属性,完整URL一般存放在 超文本浏览框1.地址 中,跳转完成后直接读取就行,注意如果页面还没加载出来,这个属性可能为空,最好在“跳转完成”事件里再取值。
如果控制的是系统IE浏览器窗口,用的是“InternetExplorer”对象,读取它的 LocationURL 属性就能得到当前地址,整个流程是:创建IE对象 → 枚举窗口找到目标 → 读取LocationURL → 调用自定义“取域名”函数处理,这一步在日常写网页数据抓取时很常用,因为浏览器里访问的地址,往往才是用户真实想看的地址。

把代码封装成“取域名”子程序,一劳永逸
不管从哪种途径拿到URL,最终都要走一遍“去协议、去路径、去参数”的清洗流程,我习惯封装成独立子程序,方便后续反复调用:
.版本 2
.子程序 取域名, 文本型
.参数 网址, 文本型
.局部变量 临时文本, 文本型
.局部变量 位置, 整数型
临时文本 = 子文本替换(网址, “http://”, “”, , , 真)
临时文本 = 子文本替换(临时文本, “https://”, “”, , , 真)
位置 = 寻找文本(临时文本, “/”, , 假)
如果真 (位置 ≠ -1)
临时文本 = 取文本左边(临时文本, 位置 - 1)
位置 = 寻找文本(临时文本, “?”, , 假)
如果真 (位置 ≠ -1)
临时文本 = 取文本左边(临时文本, 位置 - 1)
返回 (临时文本)
这一步的细节是处理参数紧跟在域名后面的情况,www.baidu.com?wd=1 这种没有路径但有参数的URL,上面的代码先找 ,再找 ,两手都照顾到了,如果网址里还带端口,www.example.com:8080,返回的结果里会包含 8080,这是后话,处理方式下面说。
易语言提取网址域名的正则写法与控制边界
字符串函数虽然直观,但遇到格式乱七八糟的URL时,正则表达式更省心。正则的匹配规则直接决定了边界在哪里,一个写好的正则可以把协议头、路径、端口一次性排除掉,不用写好几行判断。
三行正则,匹配不同格式的网址
易语言里用自带的“正则表达式类”就能实现,核心表达式:
https?://([^/:]+)
匹配逻辑是:先匹配 http:// 或 https://,然后取后面一直到冒号或斜杠之前的字符。[^/:] 表示“不包含冒号和斜杠的任意字符”, 表示一个以上,这样匹配的结果,天然跳过了端口和路径,在易语言里通过“取子匹配文本”命令取出第一个括号里的内容即可。
对于不强制要求带协议的网址,可以用 ([a-zA-Z0-9.-]+.[a-zA-Z]{2,}) 这个正则,它匹配类似 example.com 或 www.example.com.cn 的主机名结构,不过这种方式会把网址里所有类似域名的片段都抓出来,比如文章正文里的 abc.com 也会被匹配到,用的时候需要额外判断上下文,行业共识认为,正则处理这类提取任务是最省心的,但前提是你能把边界情况想明白正则越宽松,误报越多。
四种边界情况:端口、www、IP地址、不带协议
做域名提取时,很多人栽在四个细节上:

- 带端口号的域名:
www.example.com:8080,用基础正则时端口会被当成域名的一部分,正确做法是在匹配时把冒号排除在外,就像上文那个正则一样,或者在拿到结果后把端口号用“子文本替换”删掉。 - www前缀的去留:
www.example.com严格来说是example.com的子域名,如果你的程序只需要主域名做统计,把www.去掉再存储更合理;但如果你的程序是判断跳转目标是否合法,保留 www 不影响结果。 - IP地址代替域名:内网工具经常访问
168.1.1这类地址,正则同样能匹配出来,但要记得单独判断它是IP,不能按域名去做解析和分类,判断IP可以用^d{1,3}(.d{1,3}){3}$这个正则。 - 网址不带协议头:拿到手的是
www.baidu.com/s?wd=1,正则的https?://前缀就完全匹配不到,解决的办法是先用“子文本替换”补上http://再走正则,或者干脆用上文封装的字符串处理函数。
这四类情况在易语言取域名的实际开发中非常常见,尤其是做批量采集的时候,网页源码里的链接五花八门,稍不注意就会把 javascript: 协议或相对路径当成域名,业内专家指出,相对路径(如 /news/1.html)在源码里没有域名信息,要用当前页面的域名去拼接,这也提醒我们:取域名之前,先判断链接是绝对地址还是相对地址。
下面这个表列出了常用处理方式的适用场景,方便你在写代码时快速选型:
| 处理方式 | 适用场景 | 主要缺点 |
|---|---|---|
| 分割文本 | 快速查看固定格式的URL | 对协议头缺失的网址容易下标错位 |
| 取文本左边 + 寻找文本 | 自己手写独立函数 | 需要把位置判断写完整 |
| 正则表达式 | 处理复杂多变的URL | 正则符号需要理解记忆 |
| 精易模块等第三方库 | 快速开发不重复造轮子 | 依赖模块版本,发布时需注意 |
易语言网页源码批量取域名:从采集到白名单过滤
单条网址取域名只是基础,真正的常用场景是拿到一整页源码,把里面所有链接的域名全部提取出来,用来做采集白名单、反爬过滤或者站点分类,这个需求在QQ群机器人、网页采集器、导航站程序里很常见。
把整页超链接里的域名全部抽出来

思路分两步:先用正则从源码里提取全部含协议的完整URL,再逐一调用“取域名”函数清洗,提取URL可以用 https?://[^s"'<>)]+ 这个正则,匹配所有以 http:// 或 https:// 开头、遇到空格、引号、尖括号等边界就停止的字符串,然后循环取出每个URL,扔进“取域名”函数里,就能得到一串带重复的域名列表。
这一步要处理乱码,网页源码可能是UTF-8,易语言默认文本处理是GBK,用“网页_访问”命令获取源码后最好先做编码转换,否则中文路径会导致正则匹配截断在错误的位置,虽然影响域名提取的概率很小,但一旦遇到就很容易排查半天。
去重与白名单,实战中最后两步
批量提取的结果一定带着大量重复域名,去重逻辑很简单:声明一个文本数组,每拿到一个新域名,就先“寻找文本”看数组里有没有,没有就加入,这样过滤一遍后,剩下的就是干净的域名列表,可以存入常量表或数据库。
白名单过滤的逻辑则反过来:访问某个网址前,先取它的域名,再去白名单数组里查找,匹配不到就拒绝访问,这套思路用在网页跳转控制上很实用,比如易语言写浏览器插件时,拦截广告域名的本质就是维护一份“黑名单域名”列表,相比直接拦截URL,取域名做匹配有个好处:同一站点下换路径、换参数都不会误杀。
易语言取域名常见问题
取域名时网址里带着端口号和路径,怎么避免误取?
先去掉协议头,再用正则匹配时把冒号排除在外,或者在拿到结果后使用“子文本替换”删除 端口号,路径的处理则统一用“寻找文本”定位第一个 ,取它左边的部分,多个步骤可以整合进一个子程序,传入完整URL,返回干净的域名。
正则取域名匹配不到内容是怎么回事?
最常见的原因是网址没有带 http:// 或 https:// 前缀,而正则里写死了这两个前缀,解决办法是判断网址开头,缺少协议时用“子文本替换”补全,另一种常见原因是易语言正则的反斜杠需要转义,. 和 / 要写成 \. 和 \/ 才能正确表达。
易语言取域名取出来还带着“www”,要不要去掉?
看你的用途,做跳转白名单或黑名单拦截时,保留 www. 不影响匹配;做站点归属统计时,把 www. 去掉再入库更合理,需要留意的是,有些站点的 www 子域名和裸域名解析到不同服务器,这是正常的,去不去掉取决于你的程序是识别主机名还是识别站点身份。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/738546.html

