regexp split string by commas and spaces, but ignore the inside quotes and parentheses
php, regex
Solution
This will work only for non-nested parentheses:
$regex = <<<HERE
/ " ( (?:[^"\\\\]++|\\\\.)*+ ) \"
| ' ( (?:[^'\\\\]++|\\\\.)*+ ) \'
| \( ( [^)]* ) \)
| [\s,]+
/x
HERE;
$tags = preg_split($regex, $str, -1,
PREG_SPLIT_NO_EMPTY
| PREG_SPLIT_DELIM_CAPTURE);
The `++` and `*+` will consume as much as they can and give nothing back for backtracking. This technique is described in perlre(1) as the most efficient way to do this kind of matching.
Problem
I need split string by commas and spaces, but ignore the inside quotes, single quotes and parentheses ``` $str = "Questions, \"Quote\",'single quote','comma,inside' (inside parentheses) space #specialchar"; ``` so that the resultant array will have ``` [0]Questions [1]Quote [2]single quote [3]comma,inside [4]inside parentheses [5]space [6]#specialchar ``` my atual regexp is ``` $tags = preg_split("/[,\s]*[^\w\s]+[\s]*/", $str,0,PREG_SPLIT_NO_EMPTY); ``` but this is ignoring special chars and stil split the commas inside quotes, the resultant array is : ``` [0]Questions [1]Quote [2]single quote [3]comma [4]inside [5]inside parentheses [6]space [7]specialchar ``` ps: this is no csv Many Thanks