【发布时间】:2022-01-26 22:31:16
【问题描述】:
我有一个看起来像这样的输入字符串:
$txt = '!1 aaa !2 bb bb !5 cc cc cc !4 dd';
换句话说,我有许多字段,每个字段都以感叹号和数字开头。
它想把它变成这样的东西:
<div class="x1">aaa</div>
<div class="x2">bb bb</div>
<div class="x5">cc cc cc</div>
<div class="x4">dd</div>
div 类派生自输入字符串中感叹号后面的数字。
我试过这个 PHP 命令:
preg_replace("/!([0-9]) (.*) !/U", "<div class=\"x\\1\">\\2</div>\n!", $txt)
但这会产生这个输出:
<div class="x1">aaa</div>
!2 bb bb <div class="x5">cc cc cc</div>
!4 dd
很明显最后一个字段 (!4 dd) 不匹配,因为它没有最后一个!。我假设第二个字段(!2 bb bb)不匹配,因为它的初始!实际上来自于第一个字符串的替换。
所以,我想我知道它为什么不起作用,但我不知道如何正确地做到这一点。
【问题讨论】:
-
你需要
/!([0-9])\s*(.*?)\s*(?=!\d|$)/或/!(\d+)\s*(.*?)\s*(?=!\d|$)/s -
请注意,如果您的字段不包含感叹号
!(开头除外)并且不为空,您可以使用这个简单的模式:!(\d+) ([^!]*[^! ])。