Je ne parviens pas à trouver le groupe le plus approprié pour poser ma
question. Désole pour le Hors-Charte, peut-etre quelqu'un saura t'il me
rediriger (voir me répondre).
Expression réguliere:
Il ya a t'il une syntaxe pour "tout sauf"
Quelle serait par exemple l'expression réguliere pour rechercher dans
la liste suivante les chaines avec un autre caractère que B à la
seconde place (tout sauf B)
AED
BBC
ZRE
Malheureusement ça ne marche pas non plus lorsque le mot Microsoft suit immédiatement le début du même mot, par exemple MicroMicrosoft. En effet, le deuxième M est mangé par le [^s], ce qui empêche de reconnaître le Microsoft qui suit.
Finalement, le mieux c'est quand même : ^((?!Microsoft).)*$
Malheureusement ça ne marche pas non plus lorsque le mot Microsoft
suit immédiatement le début du même mot, par exemple MicroMicrosoft.
En effet, le deuxième M est mangé par le [^s], ce qui empêche de
reconnaître le Microsoft qui suit.
Finalement, le mieux c'est quand même :
^((?!Microsoft).)*$
Malheureusement ça ne marche pas non plus lorsque le mot Microsoft suit immédiatement le début du même mot, par exemple MicroMicrosoft. En effet, le deuxième M est mangé par le [^s], ce qui empêche de reconnaître le Microsoft qui suit.
Finalement, le mieux c'est quand même : ^((?!Microsoft).)*$
Jean-Marc Bourguet
(Pascal J. Bourguignon) writes:
Olivier Miakinen <om+ writes:
> Le 01/08/2008 14:52, Pascal J. Bourguignon a écrit : >> >> ^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$ >> >> est une expression régulière qui reconnait toute chaine ne contenant >> pas la sous-chaine "Microsoft". > > Tu en es sûr ? Teste-la donc avec une chaîne se terminant par > « Microsof » pour voir...
Bien vu. Merci pour ce rapport de bogue! Il faut ajouter une * (un ? irait aussi) pour que ça marche bien:
Il en suffit d'une a la fin (et tu peux virer -- sauf peut-etre perf sur un moteur ou l'autre non base sur les FSM) les [^Mcfiorst].
Derivation incrementale N'importe quoi ^.*$ qui ne contient pas M ^[^M]*$ pas Mi ^([^M]|M[^i])*$ pas Mic ^([^M]|M([^i]|i[^c]))*$ pas Micr ^([^M]|M([^i]|i([^c]|c[^r])))*$ pas Micro ^([^M]|M([^i]|i([^c]|c([^r]|r[^o]))))*$ pas Micros ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o[^s])))))*$ pas Microso ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s[^o]))))))*$ pas Microsof ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o[^f])))))))*$ pas Microsoft ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
Derivation alternative, plus facile a taper directement le resultat final (qui ne differe que par commutation autour des | du resultat final ci-dessus): il n'y a pas une foule de ) qui se suivent. ^(Microsof[^t])*$ ^(Microso(f[^t]|[^f]))*$ ^(Micros(o(f[^t]|[^f])|[^o]))*$ ^(Micro(s(o(f[^t]|[^f])|[^o])|[^s]))*$ ^(Micr(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o]))*$ ^(Mic(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r]))*$ ^(Mi(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c]))*$ ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i]))*$ ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i])|[^M])*$
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
pjb@informatimago.com (Pascal J. Bourguignon) writes:
Olivier Miakinen <om+news@miakinen.net> writes:
> Le 01/08/2008 14:52, Pascal J. Bourguignon a écrit :
>>
>> ^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$
>>
>> est une expression régulière qui reconnait toute chaine ne contenant
>> pas la sous-chaine "Microsoft".
>
> Tu en es sûr ? Teste-la donc avec une chaîne se terminant par
> « Microsof » pour voir...
Bien vu. Merci pour ce rapport de bogue!
Il faut ajouter une * (un ? irait aussi) pour que ça marche bien:
Il en suffit d'une a la fin (et tu peux virer -- sauf peut-etre perf sur un
moteur ou l'autre non base sur les FSM) les [^Mcfiorst].
Derivation incrementale
N'importe quoi
^.*$
qui ne contient pas M
^[^M]*$
pas Mi
^([^M]|M[^i])*$
pas Mic
^([^M]|M([^i]|i[^c]))*$
pas Micr
^([^M]|M([^i]|i([^c]|c[^r])))*$
pas Micro
^([^M]|M([^i]|i([^c]|c([^r]|r[^o]))))*$
pas Micros
^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o[^s])))))*$
pas Microso
^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s[^o]))))))*$
pas Microsof
^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o[^f])))))))*$
pas Microsoft
^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
Derivation alternative, plus facile a taper directement le resultat final
(qui ne differe que par commutation autour des | du resultat final
ci-dessus): il n'y a pas une foule de ) qui se suivent.
^(Microsof[^t])*$
^(Microso(f[^t]|[^f]))*$
^(Micros(o(f[^t]|[^f])|[^o]))*$
^(Micro(s(o(f[^t]|[^f])|[^o])|[^s]))*$
^(Micr(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o]))*$
^(Mic(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r]))*$
^(Mi(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c]))*$
^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i]))*$
^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i])|[^M])*$
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
> Le 01/08/2008 14:52, Pascal J. Bourguignon a écrit : >> >> ^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$ >> >> est une expression régulière qui reconnait toute chaine ne contenant >> pas la sous-chaine "Microsoft". > > Tu en es sûr ? Teste-la donc avec une chaîne se terminant par > « Microsof » pour voir...
Bien vu. Merci pour ce rapport de bogue! Il faut ajouter une * (un ? irait aussi) pour que ça marche bien:
Il en suffit d'une a la fin (et tu peux virer -- sauf peut-etre perf sur un moteur ou l'autre non base sur les FSM) les [^Mcfiorst].
Derivation incrementale N'importe quoi ^.*$ qui ne contient pas M ^[^M]*$ pas Mi ^([^M]|M[^i])*$ pas Mic ^([^M]|M([^i]|i[^c]))*$ pas Micr ^([^M]|M([^i]|i([^c]|c[^r])))*$ pas Micro ^([^M]|M([^i]|i([^c]|c([^r]|r[^o]))))*$ pas Micros ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o[^s])))))*$ pas Microso ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s[^o]))))))*$ pas Microsof ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o[^f])))))))*$ pas Microsoft ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
Derivation alternative, plus facile a taper directement le resultat final (qui ne differe que par commutation autour des | du resultat final ci-dessus): il n'y a pas une foule de ) qui se suivent. ^(Microsof[^t])*$ ^(Microso(f[^t]|[^f]))*$ ^(Micros(o(f[^t]|[^f])|[^o]))*$ ^(Micro(s(o(f[^t]|[^f])|[^o])|[^s]))*$ ^(Micr(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o]))*$ ^(Mic(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r]))*$ ^(Mi(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c]))*$ ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i]))*$ ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i])|[^M])*$
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On 01 Aug 2008 18:27:39 +0200, Jean-Marc Bourguet :
Derivation incrementale
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de créer une fonction capable de transformer une chaîne ("Microsoft"), en la regex associée (compatible avec Boost bien sûr) ?
On 01 Aug 2008 18:27:39 +0200, Jean-Marc Bourguet <jm@bourguet.org>:
Derivation incrementale
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de
créer une fonction capable de transformer une chaîne ("Microsoft"), en
la regex associée (compatible avec Boost bien sûr) ?
On 01 Aug 2008 18:27:39 +0200, Jean-Marc Bourguet :
Derivation incrementale
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de créer une fonction capable de transformer une chaîne ("Microsoft"), en la regex associée (compatible avec Boost bien sûr) ?
Olivier Miakinen
Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit :
Derivation incrementale [...] pas Microsoft ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
On 01 Aug 2008 18:27:39 +0200, Jean-Marc Bourguet :
>Derivation incrementale
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de créer une fonction capable de transformer une chaîne ("Microsoft"), en la regex associée (compatible avec Boost bien sûr) ?
std::string regexpquote(char c) { // TBD return std::string(1, c); }
std::string regexpnegator(std::string const& s) { if (s.size() == 0) { return ".*"; } else if (s.size() == 1) { return std::string("[^") + regexpquote(s[0]) + "]*"; } else { std::string result; for (int i = 0; i < s.size()-1; ++i) { result += "("; result += regexpquote(s[i]); } result += "[^"; result += regexpquote(s[s.size()-1]); result += "]"; for (int i = s.size()-1; i-- > 0; ) { result += "|[^"; result += regexpquote(s[i]); result += "])"; } result += "*"; return result; } }
int main(int argc, char** argv) { for (int i = 1; i < argc; ++i) { std::cout << argv[i] << "-> " << regexpnegator(argv[i]) << std::endl; } }
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ <gramster@gramster.com> writes:
On 01 Aug 2008 18:27:39 +0200, Jean-Marc Bourguet <jm@bourguet.org>:
>Derivation incrementale
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de
créer une fonction capable de transformer une chaîne ("Microsoft"), en
la regex associée (compatible avec Boost bien sûr) ?
std::string regexpquote(char c)
{
// TBD
return std::string(1, c);
}
std::string regexpnegator(std::string const& s)
{
if (s.size() == 0) {
return ".*";
} else if (s.size() == 1) {
return std::string("[^") + regexpquote(s[0]) + "]*";
} else {
std::string result;
for (int i = 0; i < s.size()-1; ++i) {
result += "\(";
result += regexpquote(s[i]);
}
result += "[^";
result += regexpquote(s[s.size()-1]);
result += "]";
for (int i = s.size()-1; i-- > 0; ) {
result += "\|[^";
result += regexpquote(s[i]);
result += "]\)";
}
result += "*";
return result;
}
}
int main(int argc, char** argv)
{
for (int i = 1; i < argc; ++i) {
std::cout << argv[i] << "-> " << regexpnegator(argv[i]) << std::endl;
}
}
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On 01 Aug 2008 18:27:39 +0200, Jean-Marc Bourguet :
>Derivation incrementale
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de créer une fonction capable de transformer une chaîne ("Microsoft"), en la regex associée (compatible avec Boost bien sûr) ?
std::string regexpquote(char c) { // TBD return std::string(1, c); }
std::string regexpnegator(std::string const& s) { if (s.size() == 0) { return ".*"; } else if (s.size() == 1) { return std::string("[^") + regexpquote(s[0]) + "]*"; } else { std::string result; for (int i = 0; i < s.size()-1; ++i) { result += "("; result += regexpquote(s[i]); } result += "[^"; result += regexpquote(s[s.size()-1]); result += "]"; for (int i = s.size()-1; i-- > 0; ) { result += "|[^"; result += regexpquote(s[i]); result += "])"; } result += "*"; return result; } }
int main(int argc, char** argv) { for (int i = 1; i < argc; ++i) { std::cout << argv[i] << "-> " << regexpnegator(argv[i]) << std::endl; } }
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Olivier Miakinen
Le 01/08/2008 18:50, Jean-Marc Bourguet a écrit :
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de créer une fonction capable de transformer une chaîne ("Microsoft"), en la regex associée (compatible avec Boost bien sûr) ?
int main(int argc, char** argv) { for (int i = 1; i < argc; ++i) { std::cout << argv[i] << " -> " << "^((?!" << argv[i] << ").)*$" << std::endl; } }
;-)
Le 01/08/2008 18:50, Jean-Marc Bourguet a écrit :
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de
créer une fonction capable de transformer une chaîne ("Microsoft"), en
la regex associée (compatible avec Boost bien sûr) ?
Puisqu'on est, malgré les apparences, sur fclc++, aurais-tu moyen de créer une fonction capable de transformer une chaîne ("Microsoft"), en la regex associée (compatible avec Boost bien sûr) ?
int main(int argc, char** argv) { for (int i = 1; i < argc; ++i) { std::cout << argv[i] << " -> " << "^((?!" << argv[i] << ").)*$" << std::endl; } }
;-)
Jean-Marc Bourguet
Olivier Miakinen <om+ writes:
Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit : > > Derivation incrementale > [...] > pas Microsoft > ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
Heureusement, c'est deux fois la meme organisee differemment.
Ca plante sur les chaines qui se terminent par un prefixe de Microsoft. L'automate est facile a fixer, l'exprimer sous forme de regexp, je ne vois pas.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Olivier Miakinen <om+news@miakinen.net> writes:
Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit :
>
> Derivation incrementale
> [...]
> pas Microsoft
> ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
Heureusement, c'est deux fois la meme organisee differemment.
Ca plante sur les chaines qui se terminent par un prefixe de Microsoft.
L'automate est facile a fixer, l'exprimer sous forme de regexp, je ne vois
pas.
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit : > > Derivation incrementale > [...] > pas Microsoft > ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
Heureusement, c'est deux fois la meme organisee differemment.
Ca plante sur les chaines qui se terminent par un prefixe de Microsoft. L'automate est facile a fixer, l'exprimer sous forme de regexp, je ne vois pas.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet
Jean-Marc Bourguet writes:
Olivier Miakinen <om+ writes:
> Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit : > > > > Derivation incrementale > > [...] > > pas Microsoft > > ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$ > > M : faux > > > Derivation alternative, [...] > > ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i])|[^M])*$ > > M : faux
Heureusement, c'est deux fois la meme organisee differemment.
Ca plante sur les chaines qui se terminent par un prefixe de Microsoft. L'automate est facile a fixer, l'exprimer sous forme de regexp, je ne vois pas.
Je suis stupide, mettre (M(i(c(r(o(s(of?)?)?)?)?)?)?)? en suffixe. Mais je ne vois toujours rien sans repeter une troisieme fois les lettres du mot.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet <jm@bourguet.org> writes:
Olivier Miakinen <om+news@miakinen.net> writes:
> Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit :
> >
> > Derivation incrementale
> > [...]
> > pas Microsoft
> > ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$
>
> M : faux
>
> > Derivation alternative, [...]
> > ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i])|[^M])*$
>
> M : faux
Heureusement, c'est deux fois la meme organisee differemment.
Ca plante sur les chaines qui se terminent par un prefixe de Microsoft.
L'automate est facile a fixer, l'exprimer sous forme de regexp, je ne vois
pas.
Je suis stupide, mettre (M(i(c(r(o(s(of?)?)?)?)?)?)?)? en
suffixe. Mais je ne vois toujours rien sans repeter une troisieme fois les
lettres du mot.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
> Le 01/08/2008 18:27, Jean-Marc Bourguet a écrit : > > > > Derivation incrementale > > [...] > > pas Microsoft > > ^([^M]|M([^i]|i([^c]|c([^r]|r([^o]|o([^s]|s([^o]|o([^f]|f[^t]))))))))*$ > > M : faux > > > Derivation alternative, [...] > > ^(M(i(c(r(o(s(o(f[^t]|[^f])|[^o])|[^s])|[^o])|[^r])|[^c])|[^i])|[^M])*$ > > M : faux
Heureusement, c'est deux fois la meme organisee differemment.
Ca plante sur les chaines qui se terminent par un prefixe de Microsoft. L'automate est facile a fixer, l'exprimer sous forme de regexp, je ne vois pas.
Je suis stupide, mettre (M(i(c(r(o(s(of?)?)?)?)?)?)?)? en suffixe. Mais je ne vois toujours rien sans repeter une troisieme fois les lettres du mot.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org