Szukaj…


Surowe literały smyczkowe

Najlepiej dla czytelności (i dla twojego rozsądku), aby uniknąć ucieczki ucieczki. W tym miejscu pojawiają się literały nieprzetworzonych ciągów (zwróć uwagę, że niektóre języki dopuszczają ograniczniki, które są zwykle preferowane w stosunku do ciągów. Ale to inna sekcja).

Zwykle działają w taki sam sposób, jak ta odpowiedź opisuje :

[A] ukośnik odwrotny \ jest rozumiany jako „po prostu ukośnik odwrotny” (z wyjątkiem sytuacji, gdy pojawia się tuż przed cytatem, który w przeciwnym razie zakończyłby literał) - brak „sekwencji ucieczki” reprezentujących znaki nowej linii, tabulatory, spacje, form-feeds , i tak dalej.

Nie wszystkie języki je mają, a te, które używają różnych składni. C # nazywa je dosłownie dosłownie ciągami , ale to jest to samo.


Pyton

pattern = r"regex"
pattern = r'regex'

C ++ (11+)

Składnia tutaj jest niezwykle wszechstronna. Jedyną regułą jest użycie ogranicznika, który nie pojawia się nigdzie w wyrażeniu regularnym. Jeśli to zrobisz, żadne dodatkowe znaki ucieczki nie będą konieczne dla niczego w łańcuchu. Zauważ, że nawiasy () nie są częścią wyrażenia regularnego:

pattern = R"delimiter(regex)delimiter";

VB.NET

Po prostu użyj normalnego ciągu. Odwrotne ukośniki to ZAWSZE literały .

DO#

pattern = @"regex";

Zauważ, że ta składnia dopuszcza także "" (dwa podwójne cudzysłowy) jako znak ucieczki " .

Smyczki

W większości języków programowania, w celu uzyskania odwrotnego ukośnika w łańcuchu generowanym z literału łańcucha, każdy odwrotny ukośnik musi zostać podwojony w łańcuchu znaków. W przeciwnym razie będzie interpretowane jako ucieczka dla następnej postaci.

Niestety wszelkie ukośniki wymagane przez wyrażenie regularne muszą być dosłowne. Dlatego konieczne jest „ucieczkowe znaki ucieczki” ( \\ ), gdy generowane są wyrażenia regularne z literałów łańcuchowych.

Ponadto może być konieczne wstawienie znaków cudzysłowu ( " lub ' ) w zależności od tego, które otaczają literał ciągu. W niektórych językach możliwe jest użycie dowolnego stylu cudzysłowu dla ciągu (wybierz najbardziej czytelny dla unikanie całego literału łańcucha).

W niektórych językach (np. Java <= 7) wyrażeń regularnych nie można wyrazić bezpośrednio jako literałów, takich jak /\w/ ; muszą być generowane z ciągów znaków i zwykle używane są literały ciągów - w tym przypadku "\\w" . W takich przypadkach należy unikać znaków dosłownych, takich jak cytaty, ukośniki odwrotne itp. Najłatwiejszym sposobem osiągnięcia tego jest użycie narzędzia (takiego jak RegexPlanet ). To konkretne narzędzie jest przeznaczone dla Javy, ale będzie działać dla każdego języka o podobnej składni łańcuchowej.

Jakie postacie trzeba uciec?

Funkcja zmiany znaczenia znaków pozwala dosłownie wyszukiwać określone znaki (zastrzeżone przez silnik regex do manipulowania wyszukiwaniem) i znajdować je w ciągu wejściowym. Zmiana znaczenia zależy od kontekstu, dlatego ten przykład nie obejmuje zmiany znaczenia ciągu lub separatora .

Ukośniki odwrotne

Powiedzenie, że ukośnik odwrotny jest „ucieczką”, jest nieco mylące. Odwrotny ukośnik ucieka i przynosi odwrotny ukośnik; faktycznie włącza lub wyłącza metaznak vs. dosłowny status postaci przed nim.

Aby użyć dosłownego odwrotnego ukośnika w dowolnym miejscu wyrażenia regularnego, musi być poprzedzony innym odwrotnym ukośnikiem.

Ucieczka (poza klasami postaci)

Istnieje kilka znaków, które należy uciec, aby można je było dosłownie (przynajmniej poza klasami char):

  • Wsporniki: []
  • Nawiasy: ()
  • Nawiasy klamrowe: {}
  • Operatory: * , + ? , |
  • Kotwice: ^ , $
  • Inne: . , \
  • Aby użyć literału ^ na początku lub literału $ na końcu wyrażenia regularnego, znak musi być poprzedzony znakiem ucieczki.
  • Niektóre smaki używają ^ i $ jako metaznaków tylko wtedy, gdy znajdują się odpowiednio na początku lub na końcu wyrażenia regularnego. W tych smakach nie ma potrzeby ucieczki. Tak czy inaczej, najlepiej po prostu uciec.

Ucieczka w ramach klas postaci

  • Najlepszą praktyką jest unikanie nawiasów kwadratowych ( [ i ] ), gdy pojawiają się one jako literały w klasie char. W pewnych warunkach nie jest to wymagane, w zależności od smaku , ale szkodzi czytelności.
  • Daszek ^ jest znakiem meta, gdy jest umieszczony jako pierwszy znak w klasie char: [^aeiou] . Gdziekolwiek indziej w klasie char, jest to po prostu dosłowna postać.
  • Myślnik, - , jest meta postacią, chyba że znajduje się na początku lub na końcu klasy postaci. Jeśli pierwszym znakiem w klasie char jest daszek ^ , to będzie dosłowny, jeśli będzie drugim znakiem w klasie char.

Ucieczka z zamiany

Istnieją również zasady dotyczące ucieczki w ramach zamiany, ale żadna z powyższych zasad nie ma zastosowania. Jedynymi metaznakami są $ i \ , przynajmniej gdy $ może być użyte do odniesienia do grup przechwytywania (jak $1 dla grupy 1). Aby użyć dosłownego $ , uniknij: \$5.00 . Podobnie \ : C:\\Program Files\\ .


Wyjątki BRE

Podczas gdy ERE (rozszerzone wyrażenia regularne) odzwierciedla typową składnię w stylu Perla, BRE (podstawowe wyrażenia regularne) ma znaczące różnice, jeśli chodzi o ucieczkę:

  • Istnieje inna składnia stenografii. Wszystkie \d , \s , \w itd. Zniknęły. Zamiast tego ma własną składnię (którą POSIX mylnie nazywa „klasami znaków”), na przykład [:digit:] . Te konstrukcje muszą należeć do klasy postaci.
  • Istnieje kilka metaznaków ( . , * , ^ , $ ), Których można normalnie używać. WSZYSTKIE inne metaznaki muszą być oznaczone różnymi znakami:

Aparat ortodontyczny {}

  • a{1,2} pasuje a{1,2} . Aby dopasować albo a albo aa , użyj a\{1,2\}

Nawiasy ()

  • (ab)\1 jest nieprawidłowy, ponieważ nie ma grupy przechwytywania 1. Aby to naprawić i dopasować abab użyj \(ab\)\1

Ukośnik wsteczny

  • Wewnątrz klas znaków (które są nazywane wyrażeniami nawiasów w POSIX) odwrotny ukośnik nie jest metaznakiem (i nie wymaga zmiany znaczenia). [\d] pasuje do \ lub d .
  • Gdzie indziej ucieknij jak zwykle.

Inny

  • + i ? są dosłowne. Jeśli silnik BRE obsługuje je jako metaznaki, należy je zapisać jako \? i \+ .

/ Separatory /

Wiele języków pozwala na umieszczanie wyrażeń regularnych lub rozdzielanie ich między kilkoma konkretnymi znakami, zwykle ukośnikiem / .

Ograniczniki mają wpływ na zmianę znaczenia: jeśli ogranicznikiem jest / i wyrażenie regularne musi szukać / literałów, to ukośnik musi być poprzedzony znakiem ucieczki, zanim będzie literał ( \/ ).

Nadmierne ucieczka szkodzi czytelności, dlatego ważne jest, aby wziąć pod uwagę dostępne opcje:

JavaScript jest unikalny, ponieważ umożliwia ukośnik do przodu jako separator, ale nic więcej (chociaż nie pozwala na stosowanie wyrażeń regularnych ).

Perl 1

Na przykład Perl pozwala, aby prawie wszystko było ogranicznikiem. Nawet znaki arabskie:

$str =~ m ش ش

Szczegółowe zasady są wymienione w dokumentacji Perla .

PCRE dopuszcza dwa typy ograniczników: dopasowane ograniczniki i ograniczniki w stylu nawiasów. Dopasowane ograniczniki wykorzystują parę pojedynczych znaków, podczas gdy ograniczniki w stylu nawiasów korzystają z kilku znaków reprezentujących parę otwierającą i zamykającą.

  • Pasujące ograniczniki:! !"#$%&'*+,./:;=?@^_`|~-
  • Ograniczniki w stylu nawiasów: () , {} , [] , <>


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow