我对一个案件有疑问。
我使用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>$3 - $2 - $1</li>", $text);
echo $data;
它只显示第一场比赛的问题,
也许有人知道如何解决这个案子?
谢谢:)
答案 0 :(得分:0)
在一个正则表达式中是不可能的,因为你想在PCRE引擎到达它之前使用字符串末尾的匹配。您需要分两步执行此操作:
preg_match()
与PREG_OFFSET_CAPTURE
一起捕获从字符串末尾到另一个变量的日期。使用它提供的偏移量来截断原始字符串。preg_match_all()
截断的字符串以获取时间&amp;作为数组放置,然后迭代数组以使用每个匹配&amp;用于创建列表的日期变量。 '/((?:\s*+\d\d:\d\d)++)\s++((?:.(?!\d\d:\d\d\s))++)\s*+/'
是一种合适的模式。