PHP正则:仅在特定单词及时间前存在时替换短横线
仅在含
from的时间区间中替换短横线为to的正则方案 需要将两个时间值之间的短横线替换为单词to,但仅当第一个时间值前存在单词from时才执行替换。
当前使用的代码会匹配所有带短横线的时间段组合,无法满足仅在from后触发替换的需求:
$text = "The Spa center works 08:00-20:30 every day"; $text = preg_replace('/(\d{1,2})\-(\d{1,2})/','$1 to $2', $text);
期望效果:仅在类似「The Spa center works from 08:00-20:30 every day」的语句中触发替换,最终得到「The Spa center works from 08:00 to 20:30 every day」。
感谢@Wiktor Stribiżew提供的解决方案,该方案支持Unicode字符,同时兼容时间段与短横线之间的空格,修正后的代码如下:
$text = preg_replace('/\bfrom\s+\d{1,2}:\d{2}\s*\K-(?=\s*\d{1,2}:\d{2}(?!\d))/u', 'to', $text);
注:原方案中的替换字符串
$1 to $2存在错误,因为正则中未设置捕获组,直接替换为to即可实现需求。
内容的提问来源于stack exchange,提问作者lStoilov
相关产品推荐
相关产品推荐

