Re: regex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



ANOTHER option would be to query the DB for table names and then its
fields.

You could then do a dirt-simple str_replace, because you would know
exactly what table names to expect.

//totally wrong code to give you the idea:
$tables = pg_query_something_about_table_names($connection);
foreach($tables as $table){
  $ms_table = str_replace('_', ' ', $table);
  $query = str_replace("[$ms_table]", $table, $query);
}

This would not be as "slick" as a single PCRE, but it might be more
"maintainable" for a newbie who would have a tough time with PCRE
look-ahead assertions...

ymmv

On Mon, January 21, 2008 9:55 am, Keith Roberts wrote:
> Hi Peter. Is this what you want to do. Copy this into a
> *.php page, and then look at it with your browser.
>
> I just refactored one of my heredoc queries to handle your
> problem.
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
> Transitional//EN"
>   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
>
> <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en">
>
> <head>
> <title>SQL Regex Tester</title>
> </head>
>
> <body>
>
> <?php
>
> echo "Version 1 <br />";
>
> $this_table = 'MSS TABLE NAME';
> $this_id = 5;
>
> $sql = <<<OUT
> select * from $this_table
> where ID = $this_id
> OUT;
>
> echo "Contents of \$sql: <br />$sql";
>
>
>
> echo "<br /><br /> Version 2 <br />";
>
> $sql = "SELECT DISTINCT [Table Name].[Column.Name], [Table
> Name1].[Column Name 2]";
>
> echo "Contents of \$sql: <br />$sql";
>
>
>
> echo "<br /><br /> Version 3 <br />";
>
>
> $this_table = 'MSS TABLE NAME';
> $this_id = 5;
>
> $sql = <<<OUT
> SELECT DISTINCT
> [Table Name].[Column.Name],
> [Table Name1].[Column Name 2]
> OUT;
>
> echo "Contents of \$sql: <br />$sql";
>
>
>
> echo "<br /><br /> Version 4 <br />";
>
> $tbl_name  = "[Table Name]";
> $col_name  = "[Column Name]";
>
> $tbl_name1 = "[Table Name1]";
> $col_name2 = "[Column Name 2]";
>
>
> $sql = <<<OUT
> SELECT DISTINCT
> $tbl_name.$col_name,
> $tbl_name1.$col_name2
> OUT;
>
> echo "Contents of \$sql: <br />$sql";
>
>
> echo "<br /><br /> Version 5 <br />";
>
> $sql_query = "SELECT DISTINCT";
>
> $tbl_name  = "[Table Name]";
> $col_name  = "[Column Name]";
>
> $tbl_name1 = "[Table Name1]";
> $col_name2 = "[Column Name 2]";
>
>
> $tbl_name = strtolower($tbl_name);
> $col_name = strtolower($col_name);
>
> $tbl_name1 = strtolower($tbl_name1);
> $col_name2 = strtolower($col_name2);
>
>
> $sql = <<<OUT
> $sql_query
> $tbl_name.$col_name,
> $tbl_name1.$col_name2
> OUT;
>
> echo "Contents of \$sql: <br />$sql";
>
>
>
> echo "<br /><br /> Version 6 <br />";
>
> $sql_query = "SELECT DISTINCT";
>
> $tbl_name  = "[Table Name]";
> $col_name  = "[Column Name]";
>
> $tbl_name1 = "[Table Name1]";
> $col_name2 = "[Column Name 2]";
>
>
> // convert to lower case
> $tbl_name = strtolower($tbl_name);
> $col_name = strtolower($col_name);
>
> $tbl_name1 = strtolower($tbl_name1);
> $col_name2 = strtolower($col_name2);
>
>
> // remove '[]' characters
> $tbl_name = trim($tbl_name, "[]");
> $col_name = trim($col_name, "[]");
>
> $tbl_name1 = trim($tbl_name1, "[]");
> $col_name2 = trim($col_name2, "[]");
>
>
> // replace space with '_' character
> $tbl_name = preg_replace('/\s/', '_', $tbl_name);
> $col_name = preg_replace('/\s/', '_', $col_name);
>
> $tbl_name1 = preg_replace('/\s/', '_', $tbl_name1);
> $col_name2 = preg_replace('/\s/', '_', $col_name2);
>
>
> $sql = <<<OUT
> $sql_query
> $tbl_name.$col_name,
> $tbl_name1.$col_name2
> OUT;
>
> echo "Contents of \$sql: <br />$sql";
>
> ?>
>
> </body>
> </html>
>
> The above code is not optimal, but it works OK.
>
> I use the heredoc construct to build my sql query strings.
> Saves using all those single and double quote characters.
>
> http://uk2.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
>
> HTH
>
> Keith Roberts
>
> -----------------------------------------------------------------
> Websites:
> http://www.karsites.net
> http://www.php-debuggers.net
> http://www.raised-from-the-dead.org.uk
>
> All email addresses are challenge-response protected with
> TMDA [http://tmda.net]
> -----------------------------------------------------------------
>
> On Mon, 21 Jan 2008, Peter wrote:
>
>> To: php-general@xxxxxxxxxxxxx
>> From: Peter <tasmaniac@xxxxxxxxxxxxxx>
>> Subject: Re:  regex
>>
>> Well actually not a real lot so far. I'm just trial and error(lots
>> of that)
>> at the moment. I've only been 'playing with php for about a month or
>> so.
>> $file = "phptest1.txt";
>> $rep = array ("tbl_" , "_%", "bool default 0", "bool default 1",
>> '?');
>> $wih = array ("", "_pc", "bool DEFAULT FALSE", "bool DEFAULT TRUE",
>> "" );
>>
>> if (is_file($file)) :
>>
>>  $fh = fopen($file, "r+") or die("File does not exist");
>>  while (! feof($fh)) :
>>   $line = fgets($fh,4096);
>>   $str = strtolower($line);
>>   $str_fixed = str_replace($rep, $wih, $str);
>>      print $str_fixed . "<br />";
>>  endwhile;
>>
>> Then as far as the regexp part for replacing the space inbetween
>> [blah blah
>> blah] with _ goes it was a case of try delete try delete etc. I may
>> need to
>> break the string into an array but that in its self adds its own
>> problems.
>>
>> Think one of my problems is Im try to run before I can crawl with
>> php,
>> postgre regex etc. Also its fun trying to workout things when all
>> the books
>> you come across are php/mysql.
>>
>> Came across an old message in my trawl of the news group that 'may'
>> help
>> going to give that a try as soon as I get the time. (it was more to
>> do with
>> replacing | with space between " " but it maybe convertable)
>> "Keith Roberts" <keith@xxxxxxxxxxxx> wrote in message
>> news:alpine.LFD.1.00.0801211031370.31657@xxxxxxxxxxxxxxxxxxx
>>> Can yo upost the code you have got to do the conversion so far
>>> please?
>>>
>>> Regards
>>>
>>> Keith
>>>
>>> -----------------------------------------------------------------
>>> Websites:
>>> http://www.karsites.net
>>> http://www.php-debuggers.net
>>> http://www.raised-from-the-dead.org.uk
>>>
>>> All email addresses are challenge-response protected with
>>> TMDA [http://tmda.net]
>>> -----------------------------------------------------------------
>>>
>>> On Mon, 21 Jan 2008, Peter wrote:
>>>
>>>> To: php-general@xxxxxxxxxxxxx
>>>> From: Peter <tasmaniac@xxxxxxxxxxxxxx>
>>>> Subject:  regex
>>>>
>>>> I am trying to convert ms access sql to postgresql using php.
>>>>
>>>> I have a sql statement in the form ;-
>>>> $sql = SELECT DISTINCT [Table Name].[Column.Name], [Table Name
>>>> 1].[Column
>>>> Name 2] etc.
>>>>
>>>> what I want to end up with is $sql = SELECT DISTINCT
>>>> table_name.column_name,
>>>> table_name_1.column_name_2, ........
>>>>
>>>> I have managed to get the caps to lower but I cant work out how to
>>>> put
>>>> the _
>>>> in place of spaces if the spaces are between [  ].   I either end
>>>> up with
>>>> S_E_L_E_C ..... or SELECT_DISTINCT_ etc... .
>>>>
>>>> Naturally I have only used part of sql statement and table, column
>>>> names
>>>> have been changed. (Think the one I'm trying on is 2000+
>>>> characters. So
>>>> its
>>>> not a case of set number of words/numbers between [] it could be 2
>>>> or it
>>>> could be 4 etc)
>>>>
>>>> Anyone workout what I am talking about and can help would be
>>>> appreciated.
>>>>
>>>> Peter
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some indie artist.
http://cdbaby.com/from/lynch
Yeah, I get a buck. So?

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux