如何使用正则表达式提取首个非 URL 字段及其前置 URL 序列

小强同学_7760

小强同学_7760

2026-06-27

798人浏览

原创

如何使用正则表达式提取首个非 URL 字段及其前置 URL 序列

本文介绍一种精准匹配“首个非 URL 字符串及其前面所有连续 URL(以 | 分隔)”的正则方案,支持含空格的文本,并兼顾贪婪与非贪婪场景,适用于日志解析、配置提取等结构化文本处理任务。

本文介绍一种精准匹配“首个非 url 字符串及其前面所有连续 url(以 `|` 分隔)”的正则方案,支持含空格的文本,并兼顾贪婪与非贪婪场景,适用于日志解析、配置提取等结构化文本处理任务。

在处理类似管道分隔的混合内容(如 URL 与描述文本混排)时,常见需求是:定位第一个非 URL 片段,并完整捕获其前方所有连续的 URL 及分隔符,直到该片段末尾的 |。例如:

    https://stackoverflow.com | https://google.com | first text to match | 
    https://randomsite.com | https://randomurl2.com | text | ...

目标是精确提取:

https://stackoverflow.com | https://google.com | first text to match |

而非简单匹配单词或截断空格——这正是传统 [^|]+ 或 \w+ 类模式失效的原因。

XPack
XPack

一款AI开发辅助工具,主要用于全球首个开源的MCP交易平台,适合需要提升相关任务效率的用户。

下载

✅ 推荐正则表达式(带 URL 前置约束)

\A[\s\S]*?\b\K(?:https?://\S*\h*\|\h*)+[^\s|][^|\r\n]*\|

? 模式解析:

  • \A:严格从字符串开头匹配(避免中间误匹配);
  • [\s\S]*?:惰性匹配任意字符(含换行),确保定位到首个目标区域;
  • \b\K:在单词边界处「重置匹配起点」,丢弃此前所有内容(关键!避免捕获多余前导空格或换行);
  • (?:https?://\S*\h*\|\h*)+:匹配 一个或多个「URL + 可选空白 + | + 可选空白」组合;
  • [^\s|]:确保非 URL 部分以非空格、非 | 字符开头(排除空字段);
  • [^|\r\n]*:安全匹配后续任意字符(支持空格、中文、符号等),但止于 | 或换行;
  • \|:最终锚定到目标字段末尾的竖线。

? 若允许首段无 URL(即直接以文本开头),将 + 改为 * 即可:
(...)*[^\s|][^|\r\n]*\|

? 实际代码示例(PHP)

$re = '~\A[\s\S]*?\b\K(?:https?://\S*\h*\|\h*)+[^\s|][^|\r\n]*\|~';
$str = '    https://stackoverflow.com | https://google.com | first text to match | 
    https://randomsite.com | https://randomurl2.com | text | https://randomsite.com |';

if (preg_match($re, $str, $matches)) {
    echo trim($matches[0]); // 输出:https://stackoverflow.com | https://google.com | first text to match |
}

⚠️ 注意事项

  • 不要用 .* 替代 [\s\S]*?:. 默认不匹配换行符,会导致跨行失败;
  • \K 是关键优化:它使正则引擎“忘记”之前匹配内容,避免捕获冗余前导空白,提升结果纯净度;
  • [^\s|] 防止空匹配:避免 | | text | 中误匹配空字段;
  • 如需 贪婪匹配至特定文本(如 text |),可将结尾改为 text\h*\|,但需确保唯一性,否则建议结合 preg_match_all + 手动筛选。

✅ 总结

该方案通过 \A + \K + 结构化分组,实现了对「URL 序列 + 首个非 URL 字段」的鲁棒捕获,天然支持多词、含空格、跨行场景,且无需后处理 trim 或 split,可直接用于自动化文本提取流程。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

正则表达式

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

9524

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5741

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2055

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3588

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4274

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3331

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4757

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3722

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11722

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.7万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.7万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 5.1万人学习