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

时间:2011-01-05 22:51:00

标签: 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);

......但它不起作用。有谁知道regexp会对此有用吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

preg_replace("/,$/m", ", PLACEHOLDER", $csv);

$m修饰符一起使用。 $是“行尾”锚点,m启用多行模式。

  

m (PCRE_MULTILINE)

     

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

答案 2 :(得分:0)

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

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