【问题标题】:preg_match on string and building then a new stringpreg_match 在字符串上然后构建一个新字符串
【发布时间】:2019-05-08 13:52:42
【问题描述】:

我有以下字符串:

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 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

不幸的是,我在处理正则表达式方面相对缺乏经验。

我的想法是先做一个 preg_match,然后创建新的字符串。

有人可以帮我吗?

【问题讨论】:

  • 我的想法是先做一个 preg_match 然后创建新的字符串。好主意,试试看。
  • 我认为尝试使用 preg_replace 获得结果没有多大意义。使用 preg_match 将其拆分为多个部分,然后编写一些脚本逻辑以您需要的输出格式重新排列它们。
  • 好的。我如何匹配这样的字符串“Mo,Mi-Fr 9-19 Uhr”。一点启动帮助会非常好,很有帮助。
  • 你需要自己努力,我们不是来给你写这个的。 regex101.comregextester.com 之类的网站可以帮助您入门和测试。
  • 我认为这也不应该使用一个“杀手级正则表达式”来完成。首先在逗号处拆分它,然后遍历各个部分并在空格处拆分它们,这样您就可以将日期和时间作为单独的组件来获取。继续从那里分割一天的部分......

标签: php preg-replace preg-match


【解决方案1】:

试试这个:

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

你有一个演示 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多