PHP preg_replace 日期时间和匹配项
PHP preg_replace datetime and matches
我想将 MySQL 日期时间格式字符串的样式设置为如下所示:
<b>2018-07-09</b><i>10:25:00</i>
我正在尝试使用 preg_replace()
替换匹配的模式,如下所示:
preg_replace("/([^\s]+)/",\'<b></b><i></i>\',$date)
然而,模式https://regex101.com/r/LLRx3x/1表示有两场比赛,每场比赛都有一组。第一个匹配项是日期,第二个匹配项是时间。我无法利用 </code> 和 <code>
来访问和替换每个匹配项。上面的 preg_match
代码 returns 类似于:
<b>2018-07-09</b><i></i> <b>13:25:18</b><i></i>
那么我如何访问每场比赛并替换它们以实现我的目标?
您可以将日期和时间捕获为单独的 2 组,然后您可以使用 </code> 和 <code>
:
preg_replace('~^(\S+)\s+(\S+)$~', '<b></b><i></i>', $date)
参见regex demo and a PHP demo。
请注意,$n
替换反向引用仅引用相应的捕获组值,因此如果您在模式中定义了一个捕获组,则只能使用 </code> 和 [=12 访问 1 个捕获=] 将保存一个空字符串,即 <code>preg_replace('~^(\S+)\s+\S+$~', '<b></b><i></i>', '2018-07-09 13:25:18')
将产生 <b>2018-07-09</b><i></i>
).
所以,这里的重点是同时匹配日期和时间,但将它们捕获到单独的捕获组中,然后相应地使用相应的反向引用。
图案详情
^
- 字符串的开头
(\S+)
- 捕获第 1 组(稍后用 </code> 反向引用引用):任何 1+ 个非空白字符 </li>
<li><code>\s+
- 1+ 个空格
(\S+)
- 捕获第 2 组(稍后用 </code> 反向引用引用):任何 1+ 个非空白字符 </li>
<li><code>$
- 字符串结尾。
我想将 MySQL 日期时间格式字符串的样式设置为如下所示:
<b>2018-07-09</b><i>10:25:00</i>
我正在尝试使用 preg_replace()
替换匹配的模式,如下所示:
preg_replace("/([^\s]+)/",\'<b></b><i></i>\',$date)
然而,模式https://regex101.com/r/LLRx3x/1表示有两场比赛,每场比赛都有一组。第一个匹配项是日期,第二个匹配项是时间。我无法利用 </code> 和 <code>
来访问和替换每个匹配项。上面的 preg_match
代码 returns 类似于:
<b>2018-07-09</b><i></i> <b>13:25:18</b><i></i>
那么我如何访问每场比赛并替换它们以实现我的目标?
您可以将日期和时间捕获为单独的 2 组,然后您可以使用 </code> 和 <code>
:
preg_replace('~^(\S+)\s+(\S+)$~', '<b></b><i></i>', $date)
参见regex demo and a PHP demo。
请注意,$n
替换反向引用仅引用相应的捕获组值,因此如果您在模式中定义了一个捕获组,则只能使用 </code> 和 [=12 访问 1 个捕获=] 将保存一个空字符串,即 <code>preg_replace('~^(\S+)\s+\S+$~', '<b></b><i></i>', '2018-07-09 13:25:18')
将产生 <b>2018-07-09</b><i></i>
).
所以,这里的重点是同时匹配日期和时间,但将它们捕获到单独的捕获组中,然后相应地使用相应的反向引用。
图案详情
^
- 字符串的开头(\S+)
- 捕获第 1 组(稍后用</code> 反向引用引用):任何 1+ 个非空白字符 </li> <li><code>\s+
- 1+ 个空格(\S+)
- 捕获第 2 组(稍后用</code> 反向引用引用):任何 1+ 个非空白字符 </li> <li><code>$
- 字符串结尾。