Bora
20.05.2004, 23:38:36
Mam taki string "SELECT id,record FROM data WHERE data = 'cb167'" i po raz kolejny mamm problem z opcjonalnym składnikiem. czy można jakoś napisać to wyrażenie żeby działło opcjonalnie z pogrubioną częścią stringa??
Czyli np z : "SELECT id,record FROM data";
[php:1:72a87aefd9]<?php
$input = 'SELECT id,record FROM data WHERE data = 'cb167'';
preg_match("/([A-Z]+) (.*?) FROM ([A-Za-z]+) WHERE ([a-zA-Z]+) = '([a-zA-Z0-9]+)'/is",$input,$match);
?>[/php:1:72a87aefd9]
FiDO
21.05.2004, 02:13:34
W wielkim skrocie to tak:
[php:1:06125e22f8]<?php
if (warunek)
{
$where = " WHERE data = '$costam'"
}
else
{
$where = "";
}
$q = "SELECT id, record FROM data". $where;
// ...
?>[/php:1:06125e22f8]
BTW problem raczej nie ma nic wspolnego z regexpami (no chyba ze zle cos zrozumialem, w takim razie wyjasnij lepiej), wiec zmien temat na bardziej stosowny.
scanner
21.05.2004, 06:26:36
Lub ekonomiczniej:[php:1:962364649e]<?php
$q = 'SELECT id, record FROM data';
$q .= (!empty($costam)) ? " WHERE data = '".$costam."'" : '' ;
?>[/php:1:962364649e]
Bora
21.05.2004, 09:25:58
to co piszecie to jest oczywiste ale chodzi o coś innego.
Dostaje taki string: SELECT id,record FROM data WHERE data = 'cb167'
i teraz chciałbym przez wyrażenia wyciągnąć z niego składniki.
Najlepiej nadaje sie do tego preg_match. Mozna to zrobić poprzez eregi
[php:1:994b4376ec]<?php if (eregi("WHERE", $input)) ?>[/php:1:994b4376ec] i potem to przerabiać po kawałku. Chce to uniknąc i zrobić to jednym wyrażeniem.
Czyli to zamienić na jedno wyrażenie gdzie WHERE .... byłoby składnikiem opcjinalnym i ywciągałbym o nim infornacje tylk jeśli by wystąpiło.
[php:1:994b4376ec]<?php
preg_match("/SELECT (.*?) FROM ([A-Za-z]+)/is",$input,$match);
if (eregi("WHERE", $input)) {
preg_match("/WHERE ([a-zA-Z]+) = '([a-zA-Z0-9]+)/is",$input,$match);
}
?>[/php:1:994b4376ec]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.