讲师中心 微信公众号
AI工具推荐 视频效率加速

使用PHP正则表达式从字符串中提取特定时间格式(hh:mmh)

浅伟酱_5090

浅伟酱_5090

发布时间:2025-11-24 12:48:14

|

234人浏览过

|

来源于php中文网

原创

使用PHP正则表达式从字符串中提取特定时间格式(hh:mmh)

本教程旨在指导如何使用php的`preg_match_all`函数和精确的正则表达式,从包含混合文本和数字的字符串中准确提取出`hh:mmh`格式的时间。文章将详细解释正则表达式的构建、`preg_match_all`的用法,并提供完整的代码示例,帮助开发者高效地从复杂字符串中筛选出所需的时间数据。

在日常的编程任务中,我们经常需要从文本数据中提取特定格式的信息,例如日期、时间、电话号码或电子邮件地址。当字符串中包含多种数字或字符模式时,如何精确地识别并提取出我们所需的数据,是一个常见的挑战。本文将聚焦于如何使用PHP的正则表达式功能,从一个混合了多种数字的字符串中,准确地提取出所有符合hh:mmh格式的时间。

挑战:识别与提取特定时间格式

考虑以下场景:您有一个描述店铺营业时间的字符串,其中包含天数、小时数和分钟数。例如:

'Our store is open 7 days a week from 11:00h in the morning until 20:00h in the evening. You can contact us for more information'

我们的目标是从这个字符串中提取出11:00h和20:00h这两个时间。如果仅仅使用一个宽泛的正则表达式,例如 ([0-9,]+).*?([0-9,]+),并结合 preg_match 函数,可能会遇到以下问题:

  1. 匹配不准确: [0-9,]+ 会匹配任何连续的数字或逗号,这可能导致捕获到“7”(天数)而不是时间。
  2. 只捕获首次匹配: preg_match 默认只查找第一个匹配项,如果字符串中有多个符合条件的时间,它将无法全部提取。

例如,原始的错误尝试结果是捕获了“7”和“04”,这显然不是我们期望的时间数据。

立即学习“PHP免费学习笔记(深入)”;

解决方案:preg_match_all 与精确正则表达式

要解决上述问题,我们需要采取两个关键策略:

  1. 使用 preg_match_all: 这个PHP函数专门用于查找字符串中所有与正则表达式匹配的非重叠项,并将其收集到一个数组中。
  2. 构建精确的正则表达式: 正则表达式必须足够具体,以确保只匹配我们期望的时间格式,并排除其他数字模式。

针对hh:mmh这种格式,一个精确的正则表达式是 /[0-9]{2}\:[0-9]{2}[h]/。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

正则表达式详解

让我们分解这个正则表达式的各个部分:

  • /: 这是正则表达式的定界符。在PHP中,通常使用斜杠作为定界符,但也可以使用其他字符,如 # 或 ~。
  • [0-9]{2}:
    • [0-9] 表示匹配任何一个数字(从0到9)。
    • {2} 是一个量词,表示它前面的字符(这里是[0-9])必须精确出现两次。
    • 因此,[0-9]{2} 匹配任意两位数字,这完美符合小时(hh)和分钟(mm)部分的格式要求。
  • \::
    • : 是一个字面意义上的冒号字符。
    • \ 是转义字符。在正则表达式中,某些字符具有特殊含义(例如 .、*、+ 等)。冒号虽然不是最常见的特殊字符,但为了确保它被解释为字面字符而不是潜在的元字符,进行转义是一个良好的实践。
  • [h]:
    • h 是一个字面意义上的字母 'h'。
    • [] 在这里只是将其包裹起来,表示匹配字符 'h' 本身。如果 'h' 是可选的,我们可以使用 h?。

结合起来,/[0-9]{2}\:[0-9]{2}[h]/ 能够精确地匹配“两位数字 + 冒号 + 两位数字 + 字母h”的模式。

完整示例代码

以下是使用 preg_match_all 和上述正则表达式从字符串中提取所有时间的代码示例:

<?php
$string = 'Our store is open 7 days a week from 11:00h in the morning until 20:00h in the evening. You can contact us for more information';

// 使用 preg_match_all 和精确的正则表达式提取所有 hh:mmh 格式的时间
preg_match_all('/[0-9]{2}\:[0-9]{2}[h]/', $string, $matches);

// 输出匹配结果
echo "原始字符串: " . $string . "\n\n";
echo "提取到的时间:\n";
var_dump($matches);
?>

运行上述代码,您将得到如下输出:

原始字符串: Our store is open 7 days a week from 11:00h in the morning until 20:00h in the evening. You can contact us for more information

提取到的时间:
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(6) "11:00h"
    [1]=>
    string(6) "20:00h"
  }
}

从输出可以看出,$matches 变量是一个二维数组。$matches[0] 包含了所有完整的匹配字符串,即 11:00h 和 20:00h,这正是我们期望的结果。

注意事项与扩展

  1. 正则表达式的灵活性:
    • 如果时间格式不包含 h,例如 hh:mm,则正则表达式应调整为 /\d{2}:\d{2}/ (其中 \d 是 [0-9] 的简写)。
    • 如果 h 是可选的,可以使用 /\d{2}:\d{2}h?/。
    • 如果需要支持12小时制(如 03:30 PM),正则表达式会更复杂,可能需要 /\d{2}:\d{2}\s*(AM|PM)?/i (其中 \s* 匹配零个或多个空格,? 使 AM|PM 可选,i 使匹配不区分大小写)。
  2. 捕获组: 如果您不仅需要提取完整的时间字符串,还需要单独获取小时和分钟部分,可以在正则表达式中使用捕获组(用括号 () 包裹)。例如:/(\d{2}):(\d{2})h/。这样,$matches[1] 将包含所有匹配的小时,$matches[2] 将包含所有匹配的分钟。
  3. 错误处理: 在实际应用中,建议检查 preg_match_all 的返回值。如果函数返回 0,表示没有找到任何匹配项。
  4. 性能考量: 对于非常大的字符串或在性能敏感的场景中,正则表达式的复杂性可能会影响执行效率。但对于大多数常见文本处理任务,preg_match_all 的性能是足够的。

总结

通过本教程,我们学习了如何利用PHP的 preg_match_all 函数结合精确构建的正则表达式,有效地从复杂字符串中提取出特定格式的时间数据。关键在于理解 preg_match_all 能够捕获所有匹配项的特性,并设计一个足够具体的正则表达式来排除无关数据。掌握这一技能,将大大提高您在PHP中处理和解析文本数据的能力。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

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

下载

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

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4236

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2761

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

7582

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

812

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

520

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

673

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

386

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

719

2023.12.06

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn