Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> REGEX
Bora
post
Post #1





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

Ostrzeżenie: (0%)
-----


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]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
scanner
post
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Lub ekonomiczniej:[php:1:962364649e]<?php
$q = 'SELECT id, record FROM data';
$q .= (!empty($costam)) ? " WHERE data = '".$costam."'" : '' ;
?>[/php:1:962364649e]
Go to the top of the page
+Quote Post
Bora
post
Post #4





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

Ostrzeżenie: (0%)
-----


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]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:40