8800 sujets

Développement web côté serveur, CMS

Bonjour !

Voilà je voudrais faire une requête sql avec une regexp.

Voilà la requête :

"SELECT $field_ch, id, totalstrokes
FROM dictionary
WHERE pronunciation
REGEXP '$regexp'
ORDER BY totalstrokes")
or die(mysql_error());



Cette requête doit sélectionner les prononciations des caractères chinois correspondants à la recherche utilisateur dans le champ prononciation.

Il peut y avoir de 1 à 4 prononciations dans le champ : sous la forme ([a-z]{1,6}[1-5]{1}){1,4}

exemple : qin2,hua3,hu1,ou.

Si un utilisateur poste soit qin, qin2, hua, hua3, hu ou hu1. Je veux que la regexp comptabilise ce champ. Mais pas un champ ou il y aurait shua ou a3. Donc elle doit être capable de 'comprendre' les mots en entier.

Je suis désolé c'est franchement pas clair

ma regexp : $regexp = '([a-z]{1,6}[1-5]?,){0,3}[^a-z]{1}'.$user_search.'[^a-z]{1}(,[a-z]{1,6}[1-5]?){0,3}';

[^a-z]{1}se serait pour ne pas récupérer les prononciations approximatives mais je n'y arrive pas.

Je suis vraiment pas doué avec les regexp, ne les ayant presque jamais utilisées!

A l'aide j'en ai vraiment marre !:):)
Modifié par laoseb (28 Feb 2009 - 15:03)
J'ai pas pu comprendre ta question, veux tu dire ceci ?


$post = explode(',', $_GET['user_search']);

$nv_regxp = array();
for($i=0;$<count($post);$i++)
{

if(preg_match("#([a-z]{1,6}[1-5]{1}){1,4}$#",$post[$i]))
{
$nv_regxp[] = $post[$i];
}

}

$regexp = '#('.implode('|',$nv_regxp).')#';
Modifié par nokelma (27 Feb 2009 - 18:41)
En fait, c'est bon. J'avais mal écrit la regexp.

Ce que je voulais c'est que dans un champ prononciation (forme d'une prononciation : [a-z]{1-6}[1-5]?), qui peut comporter 4 prononciations différentes séparées par uen virgule, la 'regexp' sélectionne les champs où se trouve la recherche utilisateur, mais avec quelques limitations. Si la recherche utilisateur est : hua, il ne doit pas sélectionner shua, et aussi que la regexp accepte si la recherche est seulement hua de sélectionner hua1, hua2 etc, mais pas huan. Un peu compliqué à expliquer

la regexp parfaite pour moi :

$regexp = '^([a-z]{1,6}[1-5]?,){0,3}'.$user_search.'[1-5]?(,[a-z]{1,6}[1-5]?){0,3}$';  



Merci quand même Smiley biggrin