Ho la seguente espressione regolare: (["'])(\\\1|[^\1])+\1
È possibile la negazione del gruppo Java RegExp?
Ovviamente non poteva essere compilato perché [^\1]
è illeagal.
È possibile negare un gruppo abbinato?
Ho la seguente espressione regolare: (["'])(\\\1|[^\1])+\1
È possibile la negazione del gruppo Java RegExp?
Ovviamente non poteva essere compilato perché [^\1]
è illeagal.
È possibile negare un gruppo abbinato?
Non è possibile utilizzare i riferimenti secondari in una classe di caratteri positiva o negativa.
Ma è possibile ottenere ciò che si vuole utilizzare negativo lookahead assertions:
(["'])(?:\\.|(?!\1).)*\1
Spiegazione:
(["']) # Match and remember a quote.
(?: # Either match...
\\. # an escaped character
| # or
(?!\1) # (unless that character is identical to the quote character in \1)
. # any character
)* # any number of times.
\1 # Match the corresponding quote.
Hai commentato l'altra domanda che non avrebbe funzionato. Che ne dici di '([" ']) (\\\ 1 |.) +? \ 1'? Non si suppone che l'alternanza sia abbinata da sinistra a destra? O mi sto perdendo il problema qui? Sembra essere ok JavaScript –
@FelixKling: hai ragione: spostando la parentesi sul posto corretto, infatti, risolve il problema.Vediamo se è possibile ripristinare la risposta di Ademiban –
Votato su undelete.La tua soluzione è probabilmente ancora migliore in quanto evita il backtracking –
Qual è il testo che si sta cercando di abbinare? La tua espressione regolare è un po 'confusa. – beerbajay
La domanda è, è possibile in altri sapori/lingue? Potrei immaginare che un simile costrutto non abbia senso in quanto un gruppo di cattura può contenere più di un personaggio, quindi '[^ \ 1]' sarebbe un elenco di questi personaggi ... ma questa è solo la mia opinione. Potrebbe anche essere semplicemente che il motore regex deve sapere * in anticipo * quali caratteri aspettarsi. '[\ 1]' funziona? –
L'ho trovato solo su ['regular-expression.info'] (http://www.regular-expressions.info/brackets.html): *" Non è possibile utilizzare i riferimenti differenziali all'interno di una classe di caratteri. in espressioni regolari come '(a) [\ 1b]' sarà interpretato come una fuga ottale nella maggior parte dei regex flavours.Quindi questa regex corrisponderà a 'a' seguito da' \ x01' o a 'b'." * Se voglio avere più informazioni sulle espressioni regolari, suggerisco [* Mastering Regular Expressions * di Jeffrey Friedl] (http://shop.oreilly.com/product/9780596528126.do). –