Votre tâche consiste à écrire deux expressions régulières, chacune correspondant à l'autre mais ne correspondant pas à elle-même.
Les deux expressions régulières doivent avoir cette forme:
/pattern/optional-flags
C'est également la forme sous laquelle ils doivent être appariés.
La solution la plus courte l'emporte. La longueur de la solution est comptée comme la somme des caractères dans les deux expressions régulières, y compris les barres obliques et les indicateurs.
Utilisez une norme de syntaxe regex de votre choix ou spécifiez un langage de programmation lorsque cela fait une différence.
S'amuser!
code-golf
regular-expression
GOTO 0
la source
la source
/a/
correspondabc
?/^%/
et%^/%
)Réponses:
PRCE avec le modificateur A: 9 caractères
Bien qu'il s'agisse d'une variante de la
/modifier$/
réponse de Doorknob , je pense que cette innovation la qualifie de réponse distincte plutôt que de commentaire sur la sienne: le modificateur fait double usage. Plutôt que d'être là uniquement pour que les autres expressions rationnelles correspondent, il s'ancre.La première expression régulière correspond à toute chaîne se terminant par un littéral
A
. La deuxième expression régulière correspond à n'importe quelle chaîne dont le deuxième caractère est un littéralA
, à l'aide d'un indicateur d'ancrage au début.Démo en ligne
la source
//
correspond à tout ce qui signifie que chacun des regex peut avoir au plus trois caractères non délimiteurs. En utilisant PHP PCRE, il y a 73339 expressions rationnelles non auto-appariées dans cette contrainte, et une vérification exhaustive des paires dont la longueur est inférieure à 10 (de l'ordre de 32Mpairs plutôt que de 5.7Gpairs car la plupart d'entre elles sont de 5 caractères, y compris les délimiteurs) apparaît cette solution et pas d'autres. Je prétends donc qu'il est optimal pour ce moteur regex particulier.4 + 6 = score de 10
Première expression régulière:
Deuxième expression régulière:
Hourra pour abus de drapeau! :-P
Le premier correspond à tout ce qui se termine par
i
(donc, toute expression régulière avec lei
drapeau).Le second correspond à n'importe quoi avec un deuxième caractère de
i
.Version alternative:
/i$/g
et/g$/i
.la source
/x.$/
et/^.x/
pour un tas de x/i$/
et/\/$/i
/i$/
et/i\$/i
Regexes JavaScript, score: 18
Première expression régulière:
Deuxième expression régulière:
Test JavaScript:
Testez en ligne: http://jsfiddle.net/99Sx6/
la source
Ruby regex, 15
Expressions régulières:
Juste compter les personnages ...
Version en ligne
la source
4 + 6 = 10
Première expression régulière:
Deuxième expression régulière:
i$
correspond à quelque chose qui se termine pari
, le second./$
correspond à quelque chose qui se termine par/
, le premier.la source
5 + 5 = 10
Regex # 1:
Regex # 2:
Le
0
s dans les deux expressions régulières peut être remplacé par n'importe quel non-métacaractère et l'expression régulière fonctionne toujours.0.$
correspond à tout ce dont le dernier caractère est0
, et^.0
correspond à tout ce dont le deuxième caractère est0
.la source
/
es. L'alternative est une dupe de commentaire sur la réponse de Doorknob.Regexes JavaScript, score: 13
Première expression régulière:
Deuxième expression régulière:
Explication: le premier regex correspond à tout ce qui contient un chiffre, et le second regex correspond à tout ce qui ne contient pas de
0
.Test JavaScript:
Testez en ligne: http://jsfiddle.net/5VYjC/1/
la source
12 caractères ;) JS regex
la source
Score: 5 + 5 = 10
Cela m'a pris une demi-heure pour comprendre mais je suis vraiment heureux de l'avoir fait :)
1er est:
/j.$/
2e est:
/^.j/
Le 1er correspondait à un
j
survenant en deuxième position en partant de la droite. Le 2e correspond à unj
survenant en deuxième position à partir de la gauche.Je n'ai pas testé mais je pense que ces RegEx sont vraiment polyvalents car ils
j
peuvent être remplacés par n'importe quel\w
caractère (ou plus?) Et devraient toujours fonctionner correctement.PS Cela devrait (espérons-le) fonctionner dans n'importe quelle langue. Cependant, si cela ne fonctionne pas, veuillez en informer dans les commentaires ci-dessous :)
Tester
la source
PCRE utilisant le modificateur x: 11 caractères
La première correspond à n'importe quelle chaîne avec un caractère d'espace, mais ne contient pas d'espace. Le second contient des espaces, mais il est ignoré en raison du
x
modificateur; il correspond à n'importe quelle chaîne dont l'avant-dernier caractère ests
.PCRE et autres moteurs utilisant des classes de caractères: 11 caractères
La première correspond à n'importe quelle chaîne avec un caractère "mot" (lettre, chiffre, trait de soulignement) suivi d'un littéral
w
; la seconde correspond à n'importe quelle chaîne avec un caractère autre qu'un mot suivi d'un littéralw
.PCRE et autres moteurs utilisant les classes de caractères et l'ancrage des limites de mots: 11 caractères
La première correspond à n'importe quelle chaîne avec deux caractères "mot" consécutifs; la seconde toute chaîne avec un caractère non mot ou début de chaîne suivi d'un littéral
w
.la source
ECMAScript (11 octets):
Autres moteurs REGEXP (14 octets):
Le 1er correspond à \ d [..] ou \ 1d [..].
La seconde correspond à n'importe quelle chaîne avec un nombre.
ÉDITER:
À l'origine, cette réponse a été publiée comme étant compatible avec tous les moteurs, mais elle s'est avérée erronée.
Il y avait un problème avec les références aux groupes de capture (par exemple, en php).
la source
\1
n'est-il pas interprété comme une référence arrière?"/^\1?d/"
vous aurez des problèmes, mais si vous le faites'/^\1?d/'
, alors ça va. Les guillemets font une énorme différence lorsque le code est interprété.