Twoim zadaniem tutaj jest napisanie dwóch wyrażeń regularnych, z których każde pasuje do drugiego, ale nie pasuje do siebie.
Oba wyrażenia regularne powinny mieć następującą postać:
/pattern/optional-flags
Jest to również forma, w której należy je dopasować.
Najkrótsze rozwiązanie wygrywa. Długość rozwiązania jest liczona jako suma znaków w obu wyrażeniach regularnych, w tym ukośników i flag.
Użyj wybranego standardu składni wyrażenia regularnego lub określ język programowania, jeśli ma to znaczenie.
Baw się dobrze!
code-golf
regular-expression
GOTO 0
źródło
źródło
/a/
pasujeabc
?/^%/
i%^/%
)Odpowiedzi:
PRCE z modyfikatorem A: 9 znaków
Chociaż jest to wariant
/modifier$/
odpowiedzi Doorknob , myślę, że ta innowacja kwalifikuje ją jako osobną odpowiedź, a nie komentarz do jego: modyfikator ma podwójne zastosowanie. Zamiast być tam tylko po to, by pasował inny regex, kotwica.Pierwszy regex pasuje do dowolnego łańcucha zakończonego literałem
A
. Drugi regex dopasowuje dowolny ciąg, którego drugi znak jest dosłownyA
, przy użyciu flagi zakotwiczenia na początek.Demo online
źródło
//
pasuje do wszystkiego, co oznacza, że każdy z wyrażeń regularnych może mieć co najwyżej trzy znaki bez separatora. Korzystając z PHP PCRE, istnieje 73339 niedopasowanych wyrażeń regularnych w ramach tego ograniczenia, i pojawia się wyczerpujące sprawdzenie par, których długość jest mniejsza niż 10 (rzędu 32 par zamiast 5,7 par, ponieważ większość z nich to 5 znaków, w tym ograniczniki) to rozwiązanie i żadnych innych. Dlatego twierdzę, że jest optymalny dla tego konkretnego silnika wyrażeń regularnych.4 + 6 = wynik 10
Pierwsze wyrażenie:
Drugie wyrażenie regularne:
Brawo za nadużycie flagi! :-P
Pierwszy pasuje do wszystkiego, co kończy się na
i
(a więc każde wyrażenie regularne zi
flagą).Drugi pasuje do wszystkiego, co ma drugą postać
i
.Alternatywna wersja:
/i$/g
i/g$/i
.źródło
/x.$/
i/^.x/
dla/i$/
i/\/$/i
/i$/
i/i\$/i
Wyrażenia regularne JavaScript, wynik: 18
Pierwsze wyrażenie:
Drugie wyrażenie regularne:
Test JavaScript:
Testuj online: http://jsfiddle.net/99Sx6/
źródło
Ruby regex, 15
Wyrażenia regularne:
Liczę tylko postacie ...
Wersja online
źródło
4 + 6 = 10
Pierwsze wyrażenie:
Drugie wyrażenie regularne:
i$
pasuje do czegoś, co kończy sięi
na drugim./$
pasuje do czegoś, co kończy się/
, do pierwszego.źródło
5 + 5 = 10
Regex # 1:
Regex # 2:
W
0
sw obu regexes można zastąpić dowolnym non-metaznaku i regex nadal działa.0.$
dopasowuje wszystko, co jest drugim ostatnim znakiem0
, i^.0
pasuje do wszystkiego, co jest drugim znakiem0
.źródło
/
es. Alternatywą jest duplikat komentarza do odpowiedzi Doorknob.Wyrażenia regularne JavaScript, wynik: 13
Pierwsze wyrażenie:
Drugie wyrażenie regularne:
Objaśnienie: pierwsza regex pasuje do wszystkiego, co zawiera cyfrę, a druga regex pasuje do wszystkiego, co nie zawiera
0
.Test JavaScript:
Testuj online: http://jsfiddle.net/5VYjC/1/
źródło
12 znaków ;) Wyrażenie regularne JS
źródło
Wynik: 5 + 5 = 10
Zajęło mi to pół godziny, żeby to rozgryźć, ale bardzo się cieszę, że to zrobiłem :)
1. to:
/j.$/
2 miejsce to:
/^.j/
1. pasował do
j
występującego na drugiej pozycji, zaczynając od prawej. Drugi odpowiadaj
występowaniu na drugiej pozycji, zaczynając od lewej.Nie testowałem, ale myślę, że te RegExy są naprawdę wszechstronne, ponieważ
j
można je zastąpić dowolną\w
postacią (lub więcej?) I nadal powinny działać dobrze.PS Powinno to (miejmy nadzieję) działać w dowolnym języku. Jeśli jednak to nie działa, prosimy o informację w komentarzach poniżej :)
Test
źródło
PCRE przy użyciu modyfikatora x: 11 znaków
Pierwszy pasuje do dowolnego łańcucha ze znakiem białych znaków, ale nie zawiera białych znaków. Drugi zawiera białe znaki, ale jest ignorowany z powodu
x
modyfikatora; pasuje do każdego ciągu, którego przedostatni charakter jests
.PCRE i inne silniki wykorzystujące klasy postaci: 11 znaków
Pierwszy dopasowuje dowolny ciąg znaków ze znakiem „słowa” (litera, cyfra, znak podkreślenia), po którym następuje literał
w
; drugi pasuje do dowolnego łańcucha ze znakiem innym niż słowo, po którym następuje literałw
.PCRE i inne silniki wykorzystujące klasy znaków i zakotwiczenie granicy słów: 11 znaków
Pierwszy dopasowuje dowolny ciąg znaków z dwoma kolejnymi znakami „słownymi”; drugi dowolny ciąg ze znakiem innym niż słowo lub początek ciągu, po którym następuje literał
w
.źródło
ECMAScript (11 bajtów):
Inne silniki REGEXP (14 bajtów):
Pierwsze mecze \ d [..] lub \ 1d [..].
Drugi dopasowuje dowolny ciąg z liczbą.
EDYTOWAĆ:
Oryginalnie ta odpowiedź została opublikowana jako zgodna ze wszystkimi silnikami, ale okazała się błędna.
Wystąpił problem z odniesieniami do grup przechwytywania (na przykład w php).
źródło
\1
nie jest interpretowany jako odniesienie wstecz?"/^\1?d/"
, będziesz miał problemy, ale jeśli tak'/^\1?d/'
, to w porządku. Cytaty mają ogromną różnicę przy interpretacji kodu.