Odniesienie - co oznacza to wyrażenie regularne?
Co to jest?
To jest zbiór typowych pytań i odpowiedzi. Jest to również Wiki społeczności, więc każdy może uczestniczyć w jej utrzymywaniu.
Dlaczego to?
regex cierpi z powodu pytań typu „ daj mi kod ” i słabych odpowiedzi bez wyjaśnienia. To odniesienie ma na celu zapewnienie linków do pytań i odpowiedzi dotyczących jakości.
Jaki jest zakres?
To odniesienie jest przeznaczone dla następujących języków: php , perl , javascript , python , ruby , java , .net .
To może być zbyt szerokie, ale te języki mają tę samą składnię. W przypadku określonych funkcji znajduje się tag języka, za którym stoi, na przykład:
- Co to są grupy równoważące wyrażenia regularne? .netto
Odpowiedzi
Często zadawane pytania dotyczące wyrażeń regularnych przepełnienia stosu
Zobacz też wiele ogólnych wskazówek i przydatnych linków na stronie szczegółów tagu wyrażenia regularnego .
Samouczki online
Kwantyfikatory
- Zero-lub-więcej:
*
: chciwi ,*?
: niechętnie ,*+
: zaborczy - Jedno-lub-więcej:
+
: chciwi ,+?
: niechętnie ,++
: zaborczy ?
: opcjonalne (zero lub jeden)- Min / max (wszystkie zakresy włącznie):
{n,m}
: między n m ,{n,}
n-lub-więcej ,{n}
: dokładnie n - Różnice między chciwym, niechętnym (inaczej „leniwy”, „niemiły”) a zaborczym kwantyfikatorem:
- Kwantyfikatory chciwe kontra niechętne kontra posiadające
- Dogłębna dyskusja na temat różnic między chciwymi a niechciwymi
- Jaka jest różnica między
{n}
i{n}?
- Czy ktoś może mi wyjaśnić Possessive Quantifiers? php , perl , java , ruby
- Emulowanie kwantyfikatorów dzierżawczych .net
- Odniesienia do przepełnienia stosu: od Oracle , regular-expressions.info
Klasy postaci
- Jaka jest różnica między nawiasami kwadratowymi a nawiasami?
[...]
: dowolny znak[^...]
,: zanegowany / dowolny znak ale[^]
dopasowuje dowolny znak, w tym znaki nowej linii javascript[\w-[\d]]
/[a-z-[qz]]
: set subtraction .net , xml-schema , xpath , JGSoft[\w&&[^\d]]
: ustaw przecięcie java , ruby 1.9+[[:alpha:]]
: Klasy znaków POSIX- Dlaczego
[^\\D2]
,[^[^0-9]2]
,[^2[^0-9]]
uzyskać różne wyniki w Java? Jawa - Stenografia:
- Cyfra:
\d
: cyfra ,\D
: non-cyfrowy - Postać słowo (Letter, cyfry, podkreślenia)
\w
: postać słowo ,\W
: charakter non-word - Białe znaki:
\s
: spacja ,\S
: non-białe znaki
- Cyfra:
- Kategorie Unicode (
\p{L}, \P{L}
itp.)
Sekwencje ewakuacyjne
- Białe znaki poziome:
\h
: space-lub-tab ,\t
Zakładka - Nowe linie:
- Negowane sekwencje białych znaków
\H
:: Nie pozioma\V
\N
biała spacja,: Nie pionowa biała spacja,: Nie przesuwany o wiersz znak pcre php5 java-8 - Inne:
\v
: karta pionowe ,\e
: postać ucieczka
Kotwice
^
: uruchomienie linii wejścia / ,\b
: słowo granicy, a\B
: granicę non-słowo ,$
: koniec linii wejścia /\A
: początek\Z
wejścia ,: koniec wejścia php , perl , ruby\z
: sam koniec danych wejściowych (\Z
w Pythonie) .net , php , pcre , java , ruby , icu , swift , objective-c\G
: początek dopasowania php , perl , ruby
(Zobacz także „Informacje specyficzne dla smaku → Java → Funkcje w Matcher
”)
Grupy
(...)
: grupa przechwytywania ,(?:)
: grupa non-capture\1
: odniesienie wsteczne i odniesienie do grupy przechwytywania,: odniesienie do grupy$1
przechwytywania- Co oznacza podwzór
(?i:regex)
? - Co oznacza litera „P”
(?P<group_name>regexp)
? (?>)
: grupa atomowa lub niezależna grupa ,(?|)
: Reset oddział- Nazwane grupy przechwytywania:
- Ogólne odniesienie do nazwanej grupy przechwytywania w
regular-expressions.info
- Java :
(?<groupname>regex)
: Przegląd i zasady nazewnictwa (linki dla Stos przelewowe) - Inne języki: python , .net , Perl , i php
(?P<groupname>regex)
(?<groupname>regex)
(?<groupname>regex)
(?P<groupname>regex)
(?<groupname>regex)
- Ogólne odniesienie do nazwanej grupy przechwytywania w
Lookarounds
- Lookaheads:
(?=...)
: pozytywne ,(?!...)
negatywne - Lookbehinds:
(?<=...)
: pozytywny ,(?<!...)
: negatywny (nie obsługiwane przez javascript ) - Ograniczenia lookbehind w:
- Alternatywy lookbehind:
Modyfikatory
- Większość smaki:
g
: globalny ,i
: wielkość liter ,u
: Unicode ,x
: spacja-rozszerzony c
: aktualna pozycja perle
: wyrażenie php perlo
: raz rubym
: wielowierszowego php Perl pyton JavaScript NET Java ,m
(nie) wielowierszowego rubins
: pojedyncza linia (nieobsługiwana przez javascript lub ruby ),s
obejście javascriptS
: badanie phpU
: ungreedy php r- Jak przekonwertować preg_replace e na preg_replace_callback?
- Co to są modyfikatory wbudowane?
- Co to jest „? -Mix” w wyrażeniu regularnym Ruby
Inny:
|
: naprzemienne (OR) operatora ,.
: każdy charakter ,[.]
: dosłownym postaci kropki- Jakich znaków specjalnych należy uniknąć?
- Czasowniki sterujące ( PHP i Perl ):
(*PRUNE)
,(*SKIP)
,(*FAIL)
i(*F)
- tylko php :
(*BSR_ANYCRLF)
- tylko php :
- Rekurencja ( PHP i Perl )
(?R)
,(?0)
i(?1)
,(?-1)
,(?&groupname)
Zwykłe zadania
- Zdobądź ciąg między dwoma nawiasami klamrowymi:
{...}
- Dopasuj (lub zamień) wzorzec z wyjątkiem sytuacji s1, s2, s3 ...
- Jak znaleźć wszystkie identyfikatory wideo YouTube w ciągu znaków za pomocą wyrażenia regularnego?
- Uprawomocnienie:
- Internet: adresy e-mail , adresy URL (host / port: regex i inne alternatywy), hasła
- Numeryczne: liczba , zakresy min-maks (np. 1-31) , numery telefonów , data
- Parsowanie kodu HTML z wyrażeniem regularnym: zobacz „Informacje ogólne> Kiedy nie używać wyrażenia regularnego”
Zaawansowane Regex-Fu
- Ciągi i liczby:
- Wyrażenie regularne do dopasowania wiersza, który nie zawiera słowa
- W jaki sposób ten wzorzec PCRE wykrywa palindromy?
- Dopasuj ciągi, których długość jest czwartą potęgą
- W jaki sposób to wyrażenie regularne znajduje liczby trójkątne?
- Jak ustalić, czy liczba jest liczbą pierwszą za pomocą wyrażenia regularnego?
- Jak dopasować środkowy znak w ciągu za pomocą wyrażenia regularnego?
- Inny:
- Jak możemy dopasować ^ nb ^ n do wyrażenia regularnego Java?
- Dopasuj zagnieżdżone nawiasy
- „Pionowe” dopasowanie wyrażenia regularnego w „obrazie” ASCII
- Lista pytań regex, które zostały wysoko ocenione przez użytkowników Code Golf
- Jak sprawić, by dwa kwantyfikatory powtórzyły się tyle samo razy?
- Wyrażenie regularne niemożliwe do dopasowania:
(?!a)a
- Dopasuj / usuń / zamień
this
z wyjątkiem kontekstów A, B i C. - Dopasować zagnieżdżone nawiasy do wyrażenia regularnego bez używania rekursji lub grup równoważących?
Informacje specyficzne dla smaku
(Z wyjątkiem tych oznaczonych *
, ta sekcja zawiera linki niebędące przepełnieniem stosu).
- Jawa
- Oficjalna dokumentacja: Pattern Javadoc , samouczek dotyczący wyrażeń regularnych Oracle
- Różnice między funkcjami w
java.util.regex.Matcher
:matches()
): Dopasowanie musi być zakotwiczone zarówno w input-start, jak i-endfind()
): Dopasowanie może znajdować się w dowolnym miejscu w ciągu wejściowym (podciągi)lookingAt()
: Dopasowanie musi być zakotwiczone tylko do wejścia-początku- (Ogólne informacje na temat kotwic można znaleźć w sekcji „Kotwice”)
- Jedyne
java.lang.String
funkcje, które akceptują wyrażeń regularnych:matches(s)
,replaceAll(s,s)
,replaceFirst(s,s)
,split(s)
,split(s,i)
- * (Uparte i) szczegółowe omówienie wad i brakujących funkcji w
java.util.regex
- .NETTO
- Oficjalna dokumentacja:
- Zwiększ silnik regex: Ogólna składnia , składnia Perl (używana przez TextPad, Sublime Text, UltraEdit, ... ???)
- Ogólne informacje o JavaScript 1.5 i obiekt RegExp
- .NET
- PHP: składnia wzorca ,
preg_match
- Python: operacje na wyrażeniach regularnych ,
search
vsmatch
, instrukcje - Splunk: terminologia i składnia wyrażeń regularnych oraz polecenie wyrażenia regularnego
- Tcl: składnia wyrażenia regularnego , strona podręcznika ,
regexp
polecenie - Visual Studio Znajdź i zamień
Informacje ogólne
(Linki oznaczone *
nie są linkami typu Stack Overflow).
- Inne ogólne zasoby dokumentacji: Nauka wyrażeń regularnych , * Regular-expressions.info , * Wpis Wikipedii , * RexEgg , Projekt Open-Directory
- DFA a NFA
- Generowanie ciągów pasujących do wyrażenia regularnego
- Książki: Jeffrey Friedl's Mastering Regular Expressions
- Kiedy nie używać wyrażeń regularnych:
- Niektórzy ludzie w obliczu problemu myślą: „Wiem, użyję wyrażeń regularnych”. Teraz mają dwa problemy. (post na blogu napisany przezzałożyciela Stack Overflow ) *
- Nie używaj wyrażenia regularnego do analizowania kodu HTML:
- Nie .
- Cóż, może ... jeśli jesteś naprawdę zdeterminowany (inne odpowiedzi na to pytanie też są dobre)
- Nie .
Przykłady wyrażeń regularnych, które mogą spowodować awarię silnika wyrażeń regularnych
Narzędzia: testerzy i wyjaśniacze
(Ta sekcja zawiera linki spoza stosu przepełnienia).
Online (* obejmuje tester zastępczy, + zawiera tester dzielony) :
- Debuggex (posiada również repozytorium przydatnych wyrażeń regularnych ) javascript , python , pcre
- * Wyrażenia regularne 101 php , pcre , python , javascript
- Regex Pal , regular-expressions.info javascript
- Rubular ruby
- * + regexstorm.net .net
- * RegexPlanet: Java java , Go go , Haskell haskell , JavaScript javascript , .NET dotnet , Perl perl php PCRE php , Python python , Ruby ruby , XRegExp xregexp
freeformatter.com
xregexp- * + php PCRE i POSIX, javascript
regex.larsolavtorvik.com
- Refiddle javascript ruby .net
Offline:
- Microsoft Windows: RegexBuddy (analiza), RegexMagic (tworzenie), Expresso (analiza, tworzenie, bezpłatnie)