Deine Aufgabe hier ist es, zwei reguläre Ausdrücke zu schreiben, von denen jeder mit dem anderen übereinstimmt, aber nicht mit sich selbst übereinstimmt.
Beide regulären Ausdrücke sollten folgende Form haben:
/pattern/optional-flags
Dies ist auch die Form, in der sie abgeglichen werden sollen.
Die kürzeste Lösung gewinnt. Die Lösungslänge wird als die Summe der Zeichen in beiden regulären Ausdrücken einschließlich Schrägstrichen und Flags gezählt.
Verwenden Sie einen Regex-Syntaxstandard Ihrer Wahl oder geben Sie eine Programmiersprache an, wenn dies einen Unterschied macht.
Habe Spaß!
code-golf
regular-expression
GOTO 0
quelle
quelle
/a/
übereinabc
?/^%/
und%^/%
)Antworten:
PRCE mit dem Modifikator A: 9 Zeichen
Obwohl dies eine Variante von Doorknob's ist
/modifier$/
Antwort , aber ich denke, diese Neuerung qualifiziert sie eher als separate Antwort als als Kommentar zu seiner: Der Modifikator hat doppelte Pflicht. Anstatt nur für den anderen Regex da zu sein, verankert er sich.Der erste reguläre Ausdruck entspricht einer Zeichenfolge, die mit einem Literal endet
A
. Der zweite reguläre Ausdruck entspricht einer beliebigen Zeichenfolge, deren zweites Zeichen ein Literal istA
, wobei ein Startanker-Flag verwendet wird.Online-Demo
quelle
//
übereinstimmt, bedeutet dies, dass jede der regulären Ausdrücke höchstens drei Nicht-Begrenzer-Zeichen haben kann. Unter Verwendung von PHP PCRE gibt es 73339 nicht selbst passende reguläre Ausdrücke innerhalb dieser Einschränkung, und eine erschöpfende Überprüfung der Paare mit einer Länge von weniger als 10 (in der Größenordnung von 32 MPaaren statt 5,7 GPaaren, da die meisten von ihnen 5 Zeichen einschließlich Begrenzer sind) wird durchgeführt Diese Lösung und keine anderen. Ich behaupte daher, dass es für diese spezielle Regex-Engine optimal ist.4 + 6 = Punktzahl von 10
Erster regulärer Ausdruck:
Zweiter regulärer Ausdruck:
Hurra für Flaggenmissbrauch! :-P
Der erste stimmt mit allem überein, was mit
i
(also mit jedem regulären Ausdruck) endeti
Flagge).Der zweite stimmt mit einem zweiten Zeichen von überein
i
.Alternative Version:
/i$/g
und/g$/i
.quelle
/x.$/
und/^.x/
für ein paar x/i$/
und/\/$/i
/i$/
und/i\$/i
JavaScript-Regexes, Punktzahl: 18
Erster regulärer Ausdruck:
Zweiter regulärer Ausdruck:
JavaScript-Test:
Online testen: http://jsfiddle.net/99Sx6/
quelle
Ruby Regex, 15
Reguläre Ausdrücke:
Nur Zeichen zählen ...
Online Version
quelle
4 + 6 = 10
Erster regulärer Ausdruck:
Zweiter regulärer Ausdruck:
i$
stimmt mit etwas überein, das miti
dem zweiten endet ./$
stimmt mit etwas überein, das mit/
dem ersten endet .quelle
5 + 5 = 10
Regex # 1:
Regex # 2:
Das
0
s in beiden Regexen kann durch ein beliebiges Nicht-Metazeichen ersetzt werden, und der Regex funktioniert weiterhin.0.$
stimmt mit allem überein, dessen vorletztes Zeichen ist0
, und^.0
mit allem, dessen zweites Zeichen ist0
.quelle
/
es entkommen . Die Alternative ist ein Betrug eines Kommentars zu Doorknobs Antwort.JavaScript reguläre Ausdrücke, Punktzahl: 13
Erster regulärer Ausdruck:
Zweiter regulärer Ausdruck:
Erläuterung: Der erste reguläre Ausdruck stimmt mit allem überein, das eine Ziffer enthält, und der zweite reguläre Ausdruck stimmt mit allem überein, das kein enthält
0
.JavaScript-Test:
Online testen: http://jsfiddle.net/5VYjC/1/
quelle
12 Zeichen ;) JS Regex
quelle
Bewertung: 5 + 5 = 10
Ich habe eine halbe Stunde gebraucht, um herauszufinden, aber ich bin wirklich froh, dass ich es getan habe :)
1. ist:
/j.$/
2. ist:
/^.j/
Der 1. traf auf einen
j
in der zweiten Position von rechts ausgehenden Treffer. Die 2. Stelle entspricht einerj
an zweiter Stelle stehenden Stelle beginnend von links.Ich habe nicht getestet, aber ich denke, dass diese RegExs wirklich vielseitig sind, da
j
sie durch beliebige\w
Zeichen (oder mehr?) Ersetzt werden können und trotzdem funktionieren sollten.PS Dies sollte (hoffentlich) in jeder Sprache funktionieren. Sollte dies nicht funktionieren, informieren Sie uns bitte in den Kommentaren unten :)
Prüfung
quelle
PCRE mit dem Modifikator x: 11 Zeichen
Die erste Zeichenfolge entspricht einer Zeichenfolge mit einem Leerzeichen, enthält jedoch kein Leerzeichen. Die zweite enthält Leerzeichen, wird jedoch aufgrund des
x
Modifikators ignoriert . Es stimmt mit jeder Zeichenfolge überein, deren vorletzter Charakter ists
.PCRE und andere Engines mit Zeichenklassen: 11 Zeichen
Die erste Zeichenfolge entspricht einer Zeichenfolge mit einem "Wort" -Zeichen (Buchstabe, Ziffer, Unterstrich), gefolgt von einem Literal
w
. Die zweite Zeichenfolge entspricht einer Zeichenfolge, die kein Wort enthält, gefolgt von einem Literalw
.PCRE und andere Engines mit Zeichenklassen und Wortgrenzenanker: 11 Zeichen
Die erste Zeichenfolge entspricht einer Zeichenfolge mit zwei aufeinanderfolgenden "Wort" -Zeichen. Die zweite Zeichenfolge ist eine beliebige Zeichenfolge mit einem Nicht-Wort-Zeichen oder einem Zeichenfolgenanfang, gefolgt von einem Literal
w
.quelle
ECMAScript (11 Byte):
Andere REGEXP-Engines (14 Byte):
Der 1. entspricht \ d [..] oder \ 1d [..].
Die Sekunde entspricht einer beliebigen Zeichenfolge mit einer Nummer.
BEARBEITEN:
Diese Antwort wurde ursprünglich als mit allen Motoren kompatibel eingestuft, hat sich jedoch als falsch erwiesen.
Es gab ein Problem mit Verweisen auf die Erfassungsgruppen (z. B. in PHP).
quelle
\1
nicht als Rückverweis interpretiert?"/^\1?d/"
Probleme haben, aber wenn Sie das tun'/^\1?d/'
, dann ist es in Ordnung. Die Anführungszeichen machen einen großen Unterschied, wenn der Code interpretiert wird.