如何 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 引擎到达之前使用字符串末尾的匹配项。您需要分两步完成此操作:
preg_match()
和 PREG_OFFSET_CAPTURE
将字符串末尾的日期捕获到另一个变量中。使用它提供的偏移量来截断原始字符串。
preg_match_all()
截断的字符串以获取时间和地点作为数组,然后迭代该数组以使用每个匹配项和日期变量来创建列表。 '/((?:\s*+\d\d:\d\d)++)\s++((?:.(?!\d\d:\d\d\s))++)\s*+/'
是一个合适的模式。
我对一个案例有疑问。
我正在使用 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;
它只显示第一个匹配的问题,
也许有人知道如何解决这个问题?
谢谢:)
不可能在一个正则表达式中执行,因为您想在 PCRE 引擎到达之前使用字符串末尾的匹配项。您需要分两步完成此操作:
preg_match()
和PREG_OFFSET_CAPTURE
将字符串末尾的日期捕获到另一个变量中。使用它提供的偏移量来截断原始字符串。preg_match_all()
截断的字符串以获取时间和地点作为数组,然后迭代该数组以使用每个匹配项和日期变量来创建列表。'/((?:\s*+\d\d:\d\d)++)\s++((?:.(?!\d\d:\d\d\s))++)\s*+/'
是一个合适的模式。