I lookaround non consumano caratteri!
Ecco un passo per passo modo di vederlo (potrebbe non essere il migliore, ma è così che io interpreto comunque):
primo carattere è L
, il motore regex confronta con \w+
e concorda sul fatto che si tratta di un incontro. Lo stesso accade per T
, quindi E
.
Nello spazio, il motore regex vede uno spazio nell'espressione regolare, va bene pure.
Il prossimo è il paren di apertura, ma cosa vede la regex? Ricorda che i lookaround non consumano caratteri, in modo che lo \(
in (?<=\()
non venga effettivamente consumato e \(
non corrisponde alle corrispondenze di \w+
!
Si potrebbe pensare l'espressione regolare in realtà consumano quei personaggi: \w+ \w+
, ma con una condizione sul secondo \w+
, che occorre constatare tra parentesi. La condizione potrebbe essere soddisfatta, ma l'espressione stessa non corrisponde a nessuna parentesi!
Per farlo corrispondere, si dovrebbe aggiungere le parentesi:
\w+ \((?<=\()\w+(?=\))\)
Dopo aver visto e la congruenza lo spazio, il motore regex vede (
, che concorda con l'espressione fornita, si muove in avanti.
Il motore vede quindi T
. Innanzitutto, corrisponde al carattere successivo, \w+
? Sì, secondo, c'è un paren di apertura prima di esso? Sì.
Prima di andare avanti, vede un aspetto positivo. C'è un paren di chiusura poco più avanti? No, c'è e
, ma è ancora possibile soddisfare \w+
, quindi corrisponde a e
con un altro \w
. Questo continua così fino al t
. Esiste un paren di chiusura dopo lo t
? Sì, quindi procedere al controllo successivo.
Si incontra un paren di chiusura, che corrisponde al paren di chiusura nell'espressione (notare che il paren letterale di chiusura potrebbe essere lasciato cadere qui, e invece corrisponderà a LTE (Test
).
Ma con tutto ciò, potrebbe essere altrettanto buono per aver lasciato cadere le lookarounds:
\w+ \(\w+\)
perché aggiungono più a dura prova il motore e, anche se non è così visibile su piccola scala, può essere significativo su una stringa più grande.
Speriamo che aiuti, anche se è un po '!
utilizzare http://gskinner.com/RegExr/: passa il mouse sopra il codice regex per vedere una spiegazione chiara. Vedi anche http://regex101.com/r/zE8qZ8 – hexicle
ho usato regexr per testare questo in primo luogo. ancora non mi chiarisce perché non funziona – hamobi