我尝试将两个时间值之间的破折号替换为单词to
,但前提是第一个时间值之前存在单词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);
我想让它只在句子看起来像这样的时候触发
水疗中心每天08:00-20:30开放
所以理想的结果应该是
水疗中心每天从08:00 to
20:30开始工作
最终解决方案
多亏了@Wiktor Stribizew的帮助,最终的解决方案,将匹配两个时间帧之间的Unicode和空格,破折号看起来像这样。
$text = preg_replace('/\bfrom\s+\d{1,2}:\d{2}\s*\K-(?=\s*\d{1,2}:\d{2}(?!\d))/u','$1 to $2', $text);
2条答案
按热度按时间wztqucjr1#
您可以使用
参见regex demo
\b
-字边界from
-一个字from
\s+
-一个或多个空格\d{1,2}:\d{2}
-一位或两位,:
,两位\K
-忽略匹配的文本-
-连字符(?=\d{1,2}:\d{2}(?!\d))
-紧挨着右边,必须有一个或两个数字,:
,两个数字后面不跟另一个数字。anauzrmj2#
您可以在regex模式中包含
from
关键字: