我想要设置MySQL日期时间格式字符串的样式,如下所示:
<b>2018-07-09</b><i>10:25:00</i>
我正在尝试使用preg_replace()
替换匹配的模式,如下所示:
preg_replace("/([^\s]+)/",\'<b>$1</b><i>$2</i>\',$date)
但是,模式https://regex101.com/r/LLRx3x/1表示存在两个匹配项,每个匹配项都有一个组。第一场是日期,第二场是时间。我无法利用$1
和$2
来访问和替换每个匹配项。上面的preg_match
代码返回的内容如下:
<b>2018-07-09</b><i></i> <b>13:25:18</b><i></i>
那么我该如何访问每场比赛并替换它们以达到目标呢?
答案 0 :(得分:2)
您可以将日期和时间分为两组,然后可以使用$1
和$2
:
preg_replace('~^(\S+)\s+(\S+)$~', '<b>$1</b><i>$2</i>', $date)
请参见regex demo和PHP demo。
请注意,$n
替换后向引用仅引用相应的捕获组值,因此,如果您在模式中定义了一个捕获组,则$1
和$2
仅可访问1个捕获将包含一个空字符串,即preg_replace('~^(\S+)\s+\S+$~', '<b>$1</b><i>$2</i>', '2018-07-09 13:25:18')
将产生<b>2018-07-09</b><i></i>
)。
所以,这里的重点是要同时匹配日期和时间,但将它们捕获到单独的捕获组中,然后相应地使用相应的反向引用。
模式详细信息
^
-字符串的开头(\S+)
-捕获组1(后来称为$1
反向引用):任意1个以上非空格字符\s+
-超过1个空格(\S+)
-捕获组2(后来称为$2
反向引用):任意1个以上非空格字符$
-字符串的结尾。