Ricerca…


Sintassi

  • Aspetto positivo: (?=pattern)
  • Lookahead negativo: (?!pattern)
  • Lookbehind positivo : (?<=pattern)
  • Aspetto negativo : (?<!pattern)

Osservazioni

Non supportato da tutti i motori regex.

Inoltre, molti motori regex limitano i pattern all'interno di lookbehind a stringhe di lunghezza fissa. Ad esempio il pattern (?<=a+)b dovrebbe corrispondere a b in aaab ma genera un errore in Python.

Catturare i gruppi sono consentiti e funzionano come previsto, comprese le sottorappresentazioni. Tuttavia, il lookahead / lookbehind non è un gruppo che cattura.

Nozioni di base

Un lookahead positivo (?=123) asserisce che il testo è seguito dallo schema dato, senza includere il pattern nella corrispondenza. Allo stesso modo, un lookbehind positivo (?<=123) asserisce che il testo è preceduto dal modello dato. Sostituire il = con ! nega l'affermazione.


Ingresso : 123456

  • 123(?=456) corrisponde a 123 ( lookahead positivo )
  • (?<=123)456 corrisponde a 456 ( aspetto positivo )
  • 123(?!456) fallisce ( lookahead negativo )
  • (?<!123)456 fallisce ( aspetto negativo )

Input : 456

  • 123(?=456) non riesce
  • (?<=123)456 fallisce
  • 123(?!456) fallisce
  • (?<!123)456 corrisponde a 456

Usando lookbehind per testare le conclusioni

Un lookbehind può essere usato alla fine di un pattern per assicurarsi che si concluda o meno in un certo modo.

([az ]+|[AZ ]+)(?<! ) corrisponde alle sequenze di sole lettere minuscole o solo maiuscole escludendo gli spazi bianchi finali.

Simulazione del lookbehind a lunghezza variabile con \ K

Alcuni sapori regex (Perl, PCRE, Oniguruma, Boost) supportano solo lookbehind a lunghezza fissa, ma offrono la funzione \K , che può essere utilizzata per simulare il lookbehind a lunghezza variabile all'inizio di un pattern. Quando incontri un \K , il testo abbinato fino a questo punto viene scartato e solo il testo che corrisponde alla parte del modello che segue \K viene mantenuto nel risultato finale.

ab+\Kc

È equivalente a:

(?<=ab+)c

In generale, un modello della forma:

(subpattern A)\K(subpattern B)

Finisce per essere simile a:

(?<=subpattern A)(subpattern B)

Tranne quando il subpattern di B può eguagliare lo stesso testo del subpattern A - potresti ottenere risultati leggermente diversi, perché il subpattern A continua a consumare il testo, a differenza di un vero lookbehind.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow