如何 preg_replace 一门学科中的相同项目 php?

How to preg_replace same items in one subject php?

我对一个案例有疑问。

我正在使用 php preg_replace() 函数来格式化来自该字符串的数据:

12:05 Place1 12:40 14:00 16:30 Place2 "Test" 29 Janury

我需要这样输出:

<li>29 January - Place1 - 12:05</li>
<li>29 January - Place2 "Test" - 12:40 14:00 16:30</li>

我的正则表达式:

/(\d[0-9]:\d[0-9]).+?(\D+).+?(\d[0-9]\s(January|February|March))/

我目前正在使用这样的东西:

$text = "12:05 Place1 12:40 14:00 16:30 Place2 "Test" 29 Janury";
$data = preg_replace("/(\d[0-9]:\d[0-9]).+?(\D+).+?(\d[0-9]\s(January|February|March))/", "<li> -  - </li>", $text);
echo $data;

它只显示第一个匹配的问题,

  • 1 月 29 日 - Place1 - 12:05
  • 也许有人知道如何解决这个问题?
    谢谢:)

    不可能在一个正则表达式中执行,因为您想在 PCRE 引擎到达之前使用字符串末尾的匹配项。您需要分两步完成此操作:

    1. preg_match()PREG_OFFSET_CAPTURE 将字符串末尾的日期捕获到另一个变量中。使用它提供的偏移量来截断原始字符串。
    2. preg_match_all() 截断的字符串以获取时间和地点作为数组,然后迭代该数组以使用每个匹配项和日期变量来创建列表。 '/((?:\s*+\d\d:\d\d)++)\s++((?:.(?!\d\d:\d\d\s))++)\s*+/' 是一个合适的模式。