2012-09-04 30 views
1

我有字符串$text = " /var/www/images/mobile/test/test/, 1346744549";,我需要将它转换为$text = " '/var/www/images/mobile/test/test/', '1346744549'"; - 将''添加到字符串中的每个“值”。问题出现在斜杠上,我不知道如何识别它。这里是我的示例,但它是错误已经...如何正确编写正则表达式

$text = " /var/www/images/mobile/test/test/, 1346744549"; 
$text = preg_replace("/\b|\/\b/i", '"', $text); 
echo $text; 
+1

也许'爆炸(',',$ text)'会帮助你... – k102

+0

@ k102与正则表达式它将在一个步骤,爆炸也需要内爆和做其他事情。 – NoNameZ

+1

@NoNameZ不要太在意“一步到位”(这是一个普遍的建议,不只是应用于这个问题) - 更好地做到这一点,而不是少用代码。话虽如此,'explode()'可能过于简化了。数据的格式有多静态?在第一个数据单元之前是否会有一个领先的空间?他们总是会是两个单元格,一个文件名和一个时间戳,或者可能是其他列?列将始终由','分隔吗? – DaveRandom

回答

0
$text = " /var/www/images/mobile/test/test/, 1346744549"; 
echo preg_replace('/(?=[,\s]|$|^)/i', '"', $text); 
+0

在第一个“列”之前有一个领先的空间;-) – DaveRandom

1

尝试

$text = " /var/www/images/mobile/test/test/, 1346744549"; 
$text = preg_replace("/[^\s,]+/", "'$0'", $text); 
echo $text; 

The [^\s,]+本身的任何系列的非空白,非逗号字符匹配,但与'左右(在$ 0是匹配)

如果你想允许数据内的空白,试试这个

$text = " /var/www/images/mobile/test/test/, 1346744549, Hello Foobar test"; 
$text = preg_replace("/(^\s*|,\s*)([^,]+)/", "$1'$2'", $text); 
echo $text; 

将输出

'/无功/网络/图像/移动/测试/检验/', '1346744549', '你好Foobar的测试'

+0

假设数据不能包含'\ s',可能是一个危险的假设。 – DaveRandom

+0

@DaveRandom,可能,我们不知道。这是排除领先空白的最简单方法。 – stema

+1

@DaveRandom,我更新了我的解决方案以允许数据中的空白。 – stema