Si Regex utilise avec C#, VB.NET, Perl ou n'importe quelle langue. Ainsi, quelle que soit la langue que vous utilisez, partagez avec nous une ou deux de vos expressions régulières difficiles.Quelle est l'expression régulière la plus difficile/stimulante que vous ayez jamais écrite?
Répondre
Mon entreprise a un petit produit qui fait du publipostage, un peu comme Constant Contact. Il était basé sur le Web et l'utilisateur entrerait leur email HTML via un éditeur WYSIWYG. Nous voulions qu'ils puissent entrer des valeurs dynamiques, nous avons donc dû créer un système de jetons. J'ai créé une bibliothèque complète d'analyse de jetons en utilisant des expressions régulières. Difficile et difficile mais vraiment amusant. J'ai pris soin de déclarer toutes mes regex magiques comme des constantes et de les utiliser dans le code. Fait extrêmement facile à maintenir et à mettre à jour. Je pense que l'analyse de html doit être la pire, surtout quand html peut être dans les correspondances que vous recherchez.
Réécriture ce monstre:
^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
pour être plus lisible/maintenable:
require 5.010;
my $sep = qr{ [/.-] }x; #allowed separators
my $any_century = qr/ 1[6-9] | [2-9][0-9] /x; #match the century
my $any_decade = qr/ [0-9]{2} /x; #match any decade or 2 digit year
my $any_year = qr/ $any_century? $any_decade /x; #match a 2 or 4 digit year
#match the 1st through 28th for any month of any year
my $start_of_month = qr/
(?: #match
0?[1-9] | #Jan - Sep or
1[0-2] #Oct - Dec
)
($sep) #the separator
(?:
0?[1-9] | # 1st - 9th or
1[0-9] | #10th - 19th or
2[0-8] #20th - 28th
)
\g{-1} #and the separator again
/x;
#match 28th - 31st for any month but Feb for any year
my $end_of_month = qr/
(?:
(?: 0?[13578] | 1[02]) #match Jan, Mar, May, Jul, Aug, Oct, Dec
($sep) #the separator
31 #the 31st
\g{-1} #and the separator again
| #or
(?: 0?[13-9] | 1[0-2]) #match all months but Feb
($sep) #the separator
(?:29|30) #the 29th or the 30th
\g{-1} #and the separator again
)
/x;
#match any non-leap year date and the first part of Feb in leap years
my $non_leap_year = qr/ (?: $start_of_month | $end_of_month) $any_year/x;
#match 29th of Feb in leap years
#BUG: 00 is treated as a non leap year
#even though 2000, 2400, etc are leap years
my $feb_in_leap = qr/
0?2 #match Feb
($sep) #the separtor
29 #the 29th
\g{-1} #the separator again
(?:
$any_century? #any century
(?: #and decades divisible by 4 but not 100
0[48] |
[2468][048] |
[13579][26]
)
|
(?: #or match centuries that are divisible by 4
16 |
[2468][048] |
[3579][26]
)
00
)
/x;
my $any_date = qr/$non_leap_year|$feb_in_leap/;
my $only_date = qr/^$any_date$/;
Cela ressemble sûrement à un monstre classique. : D – Rithet
Quelle est la langue? Je n'aime pas utiliser cette exp régulière pour valider les entrées. Je dois utiliser if-else ou switch-case pour résoudre cette validation. –
Ceci est en Perl 5.10, vous devez utiliser 5.10 pour obtenir \ g {-1}. Le post où je l'ai fait est http://stackoverflow.com/questions/708254 Si vous regardez cette réponse, vous verrez qu'il faut moins de vingt lignes de code pour valider la date avec le code normal (vs les lignes 70+ pour la regex maintenable). Je ne les ai pas évalués. Je suppose que je devrais. –
Numéro Roman validateur pour un projet de travail à domicile - pas le mien, il a été longtemps que j'ai a dû faire ses devoirs :-)
^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
Tous plus complexe que cela et j'ai tendance à écrire du code car je peux mieux le documenter et l'optimiser.
/=(?:[^\[\|]*?(?:\[\[[^\|\]]*(?:\|(?:[^\|\]]*))?\]\])?)+(?:\||\}\})/
Oui, je sais que ce n'est pas si longtemps (au moins par rapport à Chas de!), Mais il m'a été difficile pour de d'obtenir le droit. Pourquoi est-ce? Si vous devez demander ...
Astuce:
/\|[^\|=]*=/
est le compagnon beaucoup plus simple.
Edit:
Merci à Tomalak,
/=(?:[^\[|]*?(?:\[\[[^|\]]*(?:\|(?:[^|\]]*))?\]\])?)+(?:\||\}\})/
et
/\|[^|=]*=/
sa saveur JavaScript regex un plugin Firefox que nous espérons sortir bientôt.
En fait, "/ \ | [^ | =] * = /" serait le compagnon le plus simple. Pas besoin d'échapper le symbole de pipe dans une classe de caractères. Cela aiderait aussi l'expression régulière plus longue. :-) – Tomalak
Eh bien, ce n'est pas un dur mais il a fallu du temps pour le comprendre!
Pour faire:
SomeDocument1.docx
SomeDocument2.docx
Pour:
<A HREF="SomeDocument1.docx" >SomeDocument1</A>
<A HREF="SomeDocument2.docx" >SomeDocument2</A>
Recherche:
\(^[a-zA-Z0-9]+\)\.\([a-z]+\)
Remplacer par:
\<A HREF\=\"\1\.\2\" \>\1\<\/A\>
Déterminer le problème \(
et \)
avec le bloc de texte pour la capture a pris du temps.
Capture des groupes avec^(([^ \\\ /: \ * \? \ <\> \ | \ "] +) \. [^ \\\ /: \ * \? \ <\> \ | \"] +) $ et remplacez par \2 –
Mon ami essayait d'écrire un RE qui pourrait correspondre à {0,1} chaînes avec un nombre impair de 1 et un nombre pair de 0. Je ne pouvais pas le faire moi-même, mais j'ai écrit un programme qui pourrait transformer un automate fini en un équivalent RE. Voici la nouvelle que mon programme recracher:
>>> from dfa2re import *
<module 'dfa2re' from 'dfa2re.py'>
>>> a2 = GNFA('a', ['ab1', 'ba1', 'ac0', 'ca0', 'bd0', 'db0', 'cd1', 'dc1'], set('b'))
>>> a2.re()
'((1|0(00)*01)((11|10(00)*01))*|(0(00)*1|(1|0(00)*01)((11|10(00)*01))*(0|10(00)*1))((1(00)*1|(0|1(00)*01)((11|10(00)*01))*(0|10(00)*1)))*(0|1(00)*01)((11|10(00)*01))*)'
Vous devez ajouter^et caractères $ pour le faire fonctionner correctement, mais il fonctionne.
Comme vous pouvez le voir, il y a beaucoup moins dans la spécification du GNFA. Il était également beaucoup plus facile de concevoir, car il est très visuel et son exactitude est plus évidente.
Quelle est la complication de ce programme?Y a-t-il une chance que le reste du monde puisse l'examiner? –
C'est 345 lignes. Je pourrais le mettre en place quelque part, mais je ne suis pas sûr de savoir à quel point cela serait utile, car ce n'est pas si long. – allyourcode
Je pense que j'ai obtenu l'algorithme de ce livre, si vous voulez essayer de l'implémenter vous-même: http://tinyurl.com/sipser-computation-theory – allyourcode
Je ne l'ai pas écrit mais c'est le plus fou que j'ai vu.
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
oui, et cette expression rationnelle ne gère pas 100% des adresses e-mail;) – romaintaz
S'il vous plaît élaborer ... a le RFC changé? Je ne vois aucune référence à TLD et je l'ai utilisé pour des centaines de milliers d'adresses e-mail sans problème * pour le moment * mais je ne suis pas sûr de vouloir inverser cela, donc si vous savez quelque chose ... tell ! –
Je pense que le commentaire non-100% était juste une blague. –
- 1. Quelle est la fonction LINQ la plus effrayante que vous ayez vue?
- 2. Dans quelle langue est écrite Craigslist?
- 3. Quelles étaient les tâches les plus avancées que vous ayez faites avec le framework compact
- 4. Quelle est la fonctionnalité interne la plus ésotérique que vous avez trouvée ou lue?
- 5. Quelle est la documentation * projet * la plus utile que vous avez rencontrée?
- 6. Quelle est l'implémentation de Dijkstra la plus rapide que vous connaissez (en C++)?
- 7. Quelle partie de l'API Java SE est écrite en Java?
- 8. Le plus étrange numéro css que j'ai jamais vu
- 9. Expression régulière - quelle est mon erreur?
- 10. Quelle est l'application TAR la plus rapide?
- 11. Quelle est la manière la plus élégante de transformer une variable que vous venez de recevoir en argument?
- 12. Quel est le site/page web le plus complexe que vous avez créé ou vu?
- 13. Quelle est la bibliothèque XML la plus utilisée pour C++?
- 14. le plus étrange problème VI JAMAIS
- 15. Quelle est la solution de journalisation la plus efficace et la plus performante pour ASP.NET?
- 16. Quelle est la façon la plus pythonique de déterminer l'endianisme?
- 17. Est-ce que "le but est de développer WPF à moins que vous ayez besoin de retourner à Windows Forms" le conseil général?
- 18. Quelle est l'expression régulière pour valider jabber id?
- 19. Quelle est la longueur d'URL maximale que vous pouvez passer à la fonction Wininet, HttpOpenRequest?
- 20. Quelle bibliothèque Amazon S3 .NET est la plus utile et la plus efficace?
- 21. Comment s'assurer que UIImage n'est jamais publié?
- 22. flux de travail git pour faire des modifications que vous ne pousserez jamais à l'origine
- 23. Pourquoi cette expression régulière est-elle plus rapide?
- 24. Assurez-vous que le résultat de la requête SQL le plus récent est utilisé dans autosuggest
- 25. Quelle est l'implémentation STL avec l'empreinte mémoire la plus faible?
- 26. Quelle est la plus petite empreinte dans C#
- 27. Quel est l'exemple le plus impressionnant de Javascript/Flash/Silverlight que vous avez vu?
- 28. Quelle est la manière la plus rapide/la plus simple de dénormaliser cette table hiérarchique en une table plate?
- 29. Quelle est la manière la plus simple de faire 'est' en Java?
- 30. StringBuilder.Replace() est-il plus efficace que String.Replace?
Allez-y et rendre ce wiki communautaire s'il vous plaît. :) – Anthony
Je ose quelqu'un pour vérifier une adresse e-mail avec regex;) – Louis
Lou, si vous êtes prêt à vivre sans les commentaires dans l'adresse e-mail, celui-ci fait le travail: http://ex-parrot.com/~pdw /Mail-RFC822-Address.html Je n'ai aucune idée du nombre de lignes de code nécessaires pour le rendre lisible, ou même si cela peut être rendu lisible. –