给定这样的字符串:

"7年11个月3周"

我需要解析它,以便在PHP中,preg_split函数返回一个数组,其中包含:

0 => "7 years"
1 => "11 months"
2 => "3 weeks"

年龄字符串也可以包含像"0 years 1 month 0 weeks"这样的零.

我现在拥有的正则表达式字符串似乎只在几年和几个月之间分开:

(?!\d+)(?:\s)(?!\D+)

这是在抛开计算.

我对正则表达式不太熟悉,也不知道自己做错了什么.

推荐答案

你可以用

preg_match_all('~\d+\s+\w+~', $text, $matches)

regex demo.

请注意,preg_match_all提取模式匹配的所有匹配项.

Details:

  • \d+-一个或多个数字
  • \s+-一个或多个空格
  • \w+-一个或多个字母/数字/下划线.

其他正则表达式变体:

  • \d+\s+\S+-\S+匹配一个或多个非空白字符,因此它将匹配带有连字符和任何其他特殊字符的单词
  • \d*\.?\d+\s+\S+-\d*\.?\d+将同时匹配整数值和浮点值.

NOTE:要在子匹配捕获时获取数字和单词:

preg_match_all('~(\d+)\s+(\w+)~', $text, $matches)

Php相关问答推荐

Woocommerce自定义变体html表仅显示带值的列

Laravel:让所有用户在一年中的特定月份休息几天

如何在函数中定位WooCommerce产品循环

为什么正则表达式与得到的文本块之前得到的也行?

闭包绑定$This和垃圾收集器

如果日期是过go 日期,则隐藏事件发布类型

模仿GUZLE中的curl 工作脚本(分块数据和二进制上传一起)

Codeigniter 4中的未定义变量$HOME

在WooCommerce上设置简单和可变产品的最小订单量

防止在WordPress短代码中显示重复产品并请求代码更正

如何处理 Null 上的 array_shift() ?

多个产品类别 Select 自定义 WooCommerce 插件设置页面

将图像作为 PHP post 响应发送到浏览器

使用自定义规则进行 Livewire 验证不会显示错误

在 PHP 8.2 中使用 PHP Spreadsheet 和 CodeIgniter 3 导出 Excel 时出错

用于检测此模式的正则表达式:something;something=something,something=something... 未知次数

如何故意创建不同的错误(404,500,419)? Lavravel PHP

从 laravel 中的日期类型中删除时间

在管理表单字段中

如何简化 php API 中的格式化数组列表数据以提供 React Native 部分列表