我想要导入到数据库中的逗号分隔列表,在某些情况下,最后一项是空白的:
item1, item2, item3
item1, item2,
item1, item2,
我想使用regexp
用占位符值替换所有这些空列item1, item2, item3
item1, item2, PLACEHOLDER
item1, item2, PLACEHOLDER
我试过了:
preg_replace("/,\n/", ",PLACEHOLDER\n",$csv);
......但它不起作用。有谁知道regexp会对此有用吗?
答案 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);