从捕获中排除符号并仅获取所需数据?
Exclude symbol from capturing and get only required data?
我有包含天、小时、分钟的文本,格式如下:
4 d. 12 h. 32 m.
7 h. 22 m.
3 d. 14 h.
注意,其中一些可能不存在(例如:3 d. 14 h.
不包含分钟)
我想捕获命名组中的数字,但不捕获字符 (d.h.m.)。所以最后我需要得到类似这张地图的结果:
[
'days' => 4,
'hours' => 12,
'minutes' => 32,
]
这是我写的:(?P<days>(\d+) d.)?(?P<hours>(\d+) h.)?(?P<minutes>(\d+) m.)?
Link: https://regex101.com/r/FERRnd/1
但似乎有一些空元素,我觉得这不是完成此任务的最佳正则表达式。有什么方法可以只接收命名参数作为数字而不是其他任何东西(没有空字段,没有像 12 h.
等文本)?
非常感谢!
尝试:
(?:(?P<days>\d+) d.)?\s*(?:(?P<hours>\d+) h.)?\s*(?:(?P<minutes>\d+) m.)?
如果您可以匹配空字符串,akond 的解决方案就有效。在开头添加正面前瞻将防止匹配空字符串:
(?=\d+\s[dhm]\.)(?:(?P<days>\d+) d.)?\s*(?:(?P<hours>\d+) h.)?\s*(?:(?P<minutes>\d+) m.)?
我有包含天、小时、分钟的文本,格式如下:
4 d. 12 h. 32 m.
7 h. 22 m.
3 d. 14 h.
注意,其中一些可能不存在(例如:3 d. 14 h.
不包含分钟)
我想捕获命名组中的数字,但不捕获字符 (d.h.m.)。所以最后我需要得到类似这张地图的结果:
[
'days' => 4,
'hours' => 12,
'minutes' => 32,
]
这是我写的:(?P<days>(\d+) d.)?(?P<hours>(\d+) h.)?(?P<minutes>(\d+) m.)?
Link: https://regex101.com/r/FERRnd/1
但似乎有一些空元素,我觉得这不是完成此任务的最佳正则表达式。有什么方法可以只接收命名参数作为数字而不是其他任何东西(没有空字段,没有像 12 h.
等文本)?
非常感谢!
尝试:
(?:(?P<days>\d+) d.)?\s*(?:(?P<hours>\d+) h.)?\s*(?:(?P<minutes>\d+) m.)?
如果您可以匹配空字符串,akond 的解决方案就有效。在开头添加正面前瞻将防止匹配空字符串:
(?=\d+\s[dhm]\.)(?:(?P<days>\d+) d.)?\s*(?:(?P<hours>\d+) h.)?\s*(?:(?P<minutes>\d+) m.)?