Php 对字符串进行预匹配,然后构建一个新字符串

Php 对字符串进行预匹配,然后构建一个新字符串,php,preg-replace,preg-match,Php,Preg Replace,Preg Match,我有以下字符串: Mo,Mi-Fr 9-19 Uhr, Di 8-19, Sa 9-18 Uhr Mo-Mi+Fr 9-19, Do 8-19, Sa 9-14 Uhr Mo,MI,Fr 9-20 Uhr<br> DI,Do,Sa 8:30-20 Uhr Mo Di Do Fr 9-19, Mi 8-19, Sa 9-16 Mo,Mi Fr 9-19 Uhr,Di 8-19,Sa 9-18 Uhr Mo Mi+Fr 9-19、Do 8-19、Sa 9-14 Uhr Mo、MI

我有以下字符串:

Mo,Mi-Fr 9-19 Uhr, Di 8-19, Sa 9-18 Uhr

Mo-Mi+Fr 9-19, Do 8-19, Sa 9-14 Uhr

Mo,MI,Fr 9-20 Uhr<br>
DI,Do,Sa 8:30-20 Uhr

Mo Di Do Fr 9-19, Mi 8-19, Sa 9-16
Mo,Mi Fr 9-19 Uhr,Di 8-19,Sa 9-18 Uhr
Mo Mi+Fr 9-19、Do 8-19、Sa 9-14 Uhr
Mo、MI、Fr 9-20 Uhr
DI,Do,Sa 8:30-20 Uhr 密苏里州联邦公报9-19、密苏里州联邦公报8-19、南非联邦公报9-16
我必须像这样重新格式化这些字符串:

Mo 9-19 Uhr, Mi-Fr 9-19 Uhr, Di 8-19, Sa 9-18 Uhr

Mo-Mi 9-19, Fr 9-19, Do 8-19, Sa 9-14 Uhr

Mo 9-20 Uhr, MI 9-20 Uhr, Fr 9-20 Uhr<br>
DI 8:30-20 Uhr, Do 8:30-20 Uhr, Sa 8:30-20 Uhr

Mo 9-19, Di 9-19, Do 9-19, Fr 9-19, Mi 8-19, Sa 9-16
Mo 9-19 Uhr、Mi Fr 9-19 Uhr、Di 8-19、Sa 9-18 Uhr
Mo Mi 9-19,Fr 9-19,Do 8-19,Sa 9-14 Uhr
Mo 9-20 Uhr,MI 9-20 Uhr,Fr 9-20 Uhr
DI 8:30-20 Uhr,Do 8:30-20 Uhr,Sa 8:30-20 Uhr Mo 9-19,Di 9-19,Do 9-19,Fr 9-19,Mi 8-19,Sa 9-16
不幸的是,我在处理正则表达式方面相对缺乏经验

我的想法是首先进行预匹配,然后创建新字符串

有人能帮我吗?

试试这个:

([a-z]++(?:-[a-z]++)?+)\h*+[,+]?\h*+(?=(?:\h*+[,+]?\h*+[a-z]++(?:-[a-z]++)?+)+\h*+([0-9:-]++))

您有一个演示

我的想法是首先进行预匹配,然后创建新字符串。好主意,试试看。我认为尝试使用preg_replace来获得结果没有多大意义。使用preg_match将此拆分为多个部分,然后编写一些脚本逻辑,以按需要的输出格式重新排列这些部分。确定。如何匹配像“Mo,Mi Fr 9-19 Uhr”这样的字符串。一个小的入门帮助会非常好和有帮助。你需要自己的努力,首先,我们不是在这里为你写这个。网站喜欢或可以帮助你开始和测试东西。我认为这也不应该用一个“杀手正则表达式”来完成。首先在逗号处拆分,然后在各个部分上循环,并在空格处拆分这些部分,以便将日期和时间作为单独的组件。继续从那里分割白天部分…