Zoeken…


Opmerkingen

Terminologie

Het teken Caret (^) wordt ook aangeduid met de volgende termen:

  • hoed
  • controle
  • pijltje omhoog
  • chevron
  • circumflex accent

Gebruik

Het heeft twee toepassingen in reguliere expressies:

  • Om het begin van de regel aan te geven
  • Als het onmiddellijk na een vierkante haakje ( [^ ) wordt gebruikt, wordt de set toegestane tekens tenietgedaan (dwz [123] betekent dat het teken 1, 2 of 3 is toegestaan, terwijl de instructie [^123] elk ander teken dan 1 betekent , 2 of 3 is toegestaan.

Karakter ontsnapt

Om een teken zonder speciale betekenis uit te drukken, moet het worden ontsnapt door het vooraf te gaan met een backslash; dat wil zeggen \^ .

Begin van de regel

Wanneer de modifier met meerdere regels (?m) is uitgeschakeld , komt ^ alleen overeen met het begin van de invoerreeks:

Voor de regex

^He

De volgende invoerreeksen komen overeen:

  • Hedgehog\nFirst line\nLast line
  • Help me, please
  • He

En de volgende invoerreeksen komen niet overeen:

  • First line\nHedgehog\nLast line
  • IHedgehog
  • Hedgehog (vanwege witruimte )

Als multi-line (?m) modifier is ingeschakeld, ^ wedstrijden begin elke regel's:

^He

Het bovenstaande komt overeen met elke invoerreeks die een regel bevat die begint met He .

Met \n als het nieuwe lijnteken, komen de volgende regels overeen:

  • Hello
  • First line\nHedgehog\nLast line (alleen tweede regel)
  • My\nText\nIs\nHere (alleen laatste regel)

En de volgende invoerreeksen komen niet overeen:

  • Camden Hells Brewery
  • Helmet (vanwege witruimte )

Overeenkomende lege regels met behulp van ^

Een ander typisch gebruik van caret is het matchen van lege regels (of een lege string als de modifier met meerdere regels is uitgeschakeld).

Om overeen te komen met een lege regel (meerdere regels aan ), wordt een kruisje gebruikt naast een $ wat een ander ankerteken is dat de positie aan het einde van de regel voorstelt (ankertekens : dollar ($) ). Daarom komt de volgende reguliere expressie overeen met een lege regel:

 ^$

Ontsnappen aan het caret-karakter

Als je het ^ -teken in een tekenklasse ( tekenklassen ) moet gebruiken, plaats het dan ergens anders dan het begin van de klasse:

[12^3]

Of ontsnap aan de ^ met een backslash \ :

[\^123]

Als je het caret-teken zelf buiten een tekenklasse wilt matchen, moet je eraan ontsnappen:

\^

Dit voorkomt dat de ^ wordt geïnterpreteerd als het ankerteken dat het begin van de tekenreeks / lijn vertegenwoordigt.

Vergelijking start van lijnanker en start van stringanker

Hoewel veel mensen denken dat ^ betekent het begin van een string, maar eigenlijk betekent het begin van een lijn. Voor een daadwerkelijke start van stringankergebruik, \A

De string hello\nworld (of beter hello\nworld )

hello
world

Komt overeen met de reguliere expressies ^h , ^w en \Ah maar niet met \Aw

Multiline modifier

Standaard komt het caret ^ metacharacter overeen met de positie vóór het eerste teken in de tekenreeks.

Gegeven de string " charsequence " toegepast op de volgende patronen: /^char/ & /^sequence/ , zal de engine als volgt proberen overeen te komen:

  • /^char/

    • ^ - CharSequence
    • c - c consequentie
    • h - ch gevolg
    • a - cha gevolg
    • r - char volgorde

    Overeenkomst gevonden

  • /^sequence/

    • ^ - CharSequence
    • s - CharSequence

    Match niet gevonden

Hetzelfde gedrag wordt ook van toepassing wanneer de tekenreeks lijn terminators, zoals \r?\n . Alleen de positie aan het begin van de string wordt gematcht.

Bijvoorbeeld:

/^/g

┊char \ r \ n
\ R \ n
volgorde

Als u echter na elke lijnafsluiter moet matchen, moet u de multilijnmodus ( //m , (?m) ) in uw patroon instellen. Door dit te doen, komt het kruisje ^ overeen met "het begin van elke regel", wat overeenkomt met de positie aan het begin van de string en de posities onmiddellijk na 1 de terminators.

1 In sommige smaken (Java, PCRE, ...), komt ^ niet overeen na de lijnterminator, als de lijnterminator de laatste in de string is.

Bijvoorbeeld:

/^/gm

┊char \ r \ n
┊ \ r \ n
┊sequence

Enkele van de reguliere expressie-engines die Multiline-modifier ondersteunen:

  • Java

    Pattern pattern = Pattern.compile("(?m)^abc");
    Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);
    
  • .NETTO

    var abcRegex = new Regex("(?m)^abc");
    var abdRegex = new Regex("^abc", RegexOptions.Multiline)
    
  • PCRE

    /(?m)^abc/
    /^abc/m
    
  • Python 2 & 3 (ingebouwde re module)

    abc_regex = re.compile("(?m)^abc");
    abc_regex = re.compile("^abc", re.MULTILINE); 
    


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow