Look at the following string:
SELECT
column1 ,
column2, column3
FROM
table1
WHERE
column1 = 'text, "FROM" \'from\\\' x' AND
column2 = "sample text 'where' \"where\\\" " AND
( column3 = 5 )
I need to escape unnecessary white space characters from the string like:
- removing white space from beginning and ending position of , ( ) etc
- removing newline (\r\n) and tabs (\t)
But one thing. The remove process could not remove white spaces from the quoted string like:
- ‘text, “FROM” \’from\\’ x’
- “sample text ‘where’ \”where\\” “
etc.
i need to use the PHP function: preg_replace($pattern, $replacement, $string);
So what will be the value of $pattern and $replacement where the value of $string is the given SQL.
A single regex-pattern and replacement string string will not work. Your first step could be to tokenize the input string: try first to match comments and string literals, and then try to match white space chars and lastly non-space chars. A quick demo:
produces:
and then you can iterate over your tokenized
$matchesarray and replace the space-matches where you see fit.But as you might have read in my already deleted comment, a better option would be to use some dedicated SQL parser to perform this tokenizing: I am not fluent in SQL, but I am fairly sure my demo above can be easily broken.