Php 将逗号后跟换行符与正则表达式匹配

Php 将逗号后跟换行符与正则表达式匹配,php,regex,Php,Regex,我有一个逗号分隔的列表要导入数据库,在某些情况下,最后一项为空: item1, item2, item3 item1, item2, item1, item2, 我想使用regexp用占位符值替换所有这些空列 item1, item2, item3 item1, item2, PLACEHOLDER item1, item2, PLACEHOLDER 我试过这个: preg_replace("/,\n/", ",PLACEHOLDER\n",$csv); …但它不起作用。有人知道什么reg

我有一个逗号分隔的列表要导入数据库,在某些情况下,最后一项为空:

item1, item2, item3
item1, item2,
item1, item2,
我想使用regexp用占位符值替换所有这些空列

item1, item2, item3
item1, item2, PLACEHOLDER
item1, item2, PLACEHOLDER
我试过这个:

preg_replace("/,\n/", ",PLACEHOLDER\n",$csv);
…但它不起作用。有人知道什么regexp可以用于此吗

preg_replace("/,$/m", ", PLACEHOLDER", $csv);
$
m
修饰符一起使用
$
是“行结束”锚点,
m
启用多行模式

默认情况下,PCRE将主题字符串视为由单个“行”字符组成(即使它实际上包含多个换行符)。“行开始”元字符(
^
)仅在字符串开头匹配,而“行结束”元字符(
$
)仅在字符串结尾或终止换行符之前匹配(除非设置了
D
修饰符)。这与Perl相同。设置此修饰符后,“行的开始”和“行的结束”构造将分别在主题字符串中任何换行之后或之前匹配,以及在起始和结束处匹配。这相当于Perl的
/m
修饰符。如果主题字符串中没有
\n
字符,或者模式中没有出现
^
$
,则设置此修饰符无效


preg\u replace(“/,\s*$/m”,”,占位符\n“,$csv)应该这样做。此模式匹配逗号,后跟任意数量的空格,后跟行尾,并将其替换为占位符文本。

为了避免插入空行,以及在最后一行捕获不完整的列表,正则表达式需要提供如下替代方案:

$csv = preg_replace('/(?:,\s*[\r\n]+)|(?:,\s*$)/', ", PLACEHOLDER\n", $csv);

您应该检查
fgetcsv
功能。也许?如果没有任何空格,则替换为*:preg_replace(“/,\s?$/m,”,PLACEHOLDER\n“,$csv);你的regexp搞定了Alex,谢谢!像/,$/m这样更简单的regexp对我不起作用。@Purpletoucan-Alex的\s*更好,因为它允许0或更多的空格,而\s?只允许0或1。@Purpletoucan:请参阅James的评论。
\s*
模式匹配0个或多个空白字符,而
\s?
仅匹配0或1。您可能一直在考虑
\s+
,它将匹配1个或多个,但不匹配0。是的,抱歉-忽略我的评论…头部有洞的时刻;)