Perchè ']' e '}' non sono metacaratteri in Regex quando ')' è?

2

In Avvio rapido di espressioni regolari , si legge

Twelve characters have special meanings in regular expressions: the backslash \, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), the opening square bracket [, and the opening curly brace {. These special characters are often called "metacharacters". Most of them are errors when used alone.

Nelle sue specifiche, () , [ , { sono metacaratteri, mentre "parentesi quadra chiusa" e "parentesi graffa chiusa" non lo sono.

Ovviamente, [ e { non sono in grado di eseguire un effetto singolarmente, proprio come aprire la parentesi ( con partner ) .

Qual è la ragione per cui non è possibile selezionare ] e } ?

    
posta JawSaw 07.12.2017 - 10:46
fonte

1 risposta

6

Puoi scrivere un ] nella maggior parte dei motori regex e farlo corrispondere a ] nell'input. Funziona perché ] da solo non ha un significato speciale.

Al contrario, non puoi scrivere un [ per corrispondere a [ nell'input - il motore regex si lamenterà che le parentesi sono sbilanciate. Questo è probabilmente il motivo per cui questo testo dice che [ è speciale e ] non lo è.

Questo sembra non intuitivo, ma è vero. ] ha un significato speciale solo all'interno di una classe di caratteri e il significato speciale è "termina la classe". Questo è come - , che ha anche un significato speciale solo all'interno di una classe di caratteri (il significato è "creare un intervallo tra le due lettere adiacenti"). Questo non significa che - in generale sia un metacarattere, e per lo stesso motivo ] in generale non è un metacarattere.

Se ciò sembra strano, sei in buona compagnia, ma è il modo più logico di guardarlo. Il motivo per cui sembra strano è che siamo condizionati a considerare [] () {} come coppie corrispondenti. (Confronta il ben noto "paradosso" che ())( è un palindromo, ma (()) non è .)

    
risposta data 07.12.2017 - 11:02
fonte

Leggi altre domande sui tag