Ho la mia espressione regolare /'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
e il mio codice di prova ('He said, "You're cool."' , 'Rawr')
(Il mio codice di test simula parametri viene passato in una funzione.)
spiegherò la mia espressione regolare se ho capito bene e, auspicabilmente, alcuni di voi può far luce sul mio problema
1) /'
significa all'inizio della stringa corrispondente, ci deve essere '
2) (.*)
mezzi catturare qualsiasi carattere tranne \n
0 o più volte
3) (?:(?:4)|(?:5))
mezzi non catturano, ma cercano di eseguire il passaggio 4 e se non funziona passo try 5
4) (?:'\s*,\s*)
mezzi non catturano ma ci deve essere un '
con 0 o più caratteri di spaziatura seguito da un ,
con 0 o più caratteri di spaziatura
5) (?:'\))
mezzi non catturano, ma ci deve essere ')
così sembra che si deve restituire il presente (e questo è quello che voglio):
'
+ He said, "You're cool."
+ ' ,
ma restituisce:
'
+ He said, "You're cool."' , 'Rawr
+ ')
Se cambio il mio codice di prova per ('He said, "You're cool."' , 'Rawr'
(non finire parentesi) restituisce quello che voglio, ma non appena aggiungo che l'ultima parentesi, allora sembra che il mio operatore OR fa quello che vuole. Voglio testare prima se c'è una virgola, e rompere lì se ce n'è uno, e se non c'è un controllo per una parentesi.
Ho provato a cambiare gli spot del passaggio 4 e del passaggio 5, ma l'operatore OR sembra sempre predefinito sul lato (?:'\))
. Come posso abbinare il minor numero possibile?RegExp - Come posso abbinare il minor numero possibile?
8
A
risposta
15
Non penso che il tuo problema sia l'operatore OR, ma lo greediness dello .*
. Corrisponde alla stringa completa, quindi indietro -track fino a quando le seguenti espressioni corrispondono. La prima partita in questo processo di backtracking sarà 'He said, "You're cool."' , 'Rawr
+ ')
. Prova invece a .*?
!
Problemi correlati
- 1. Come abbinare il punto interrogativo "?" come regexp nella posizione nginx.conf
- 2. Come dividere una stringa nel minor numero possibile di palindromi?
- 3. dart come abbinare e quindi sostituire un regexp
- 4. Come abbinare la riga finale finale con regexp?
- 5. Algoritmo per effettuare il minor numero di chiamate a un'API
- 6. tipo Regexp per numero 0
- 7. RegExp per abbinare tre lettere, ma non testo "ACQUISTA"
- 8. Come posso ottenere il numero minimo/massimo possibile numerico?
- 9. Controllare gcc minor in cmake
- 10. Come farei l'equivalente di Enumerator.detect di Prototype in Perl con il minor numero di codice?
- 11. MySql REGEXP per abbinare due separati da virgola stringhe
- 12. Come abbinare numeri pari di lettere o numeri dispari di lettere usando regexp per mysql
- 13. Algoritmo: Rimuovere il minor numero di elementi possibili da un set per far valere nessun sottoinsiemi
- 14. Come posso abbinare il primo subpattern in C#?
- 15. migrating minor rails versions
- 16. RegEx necessario per abbinare il numero a 2 posizioni decimali
- 17. Perché questo comando sed per abbinare il numero non funziona?
- 18. Inverti regexp in vim
- 19. È possibile abbinare una ripetizione di carattere con regex? Come?
- 20. Come abbinare la parola racchiusa da spazi O alla fine/all'inizio della stringa usando Perge regexp?
- 21. Algoritmo per trovare il minor numero di tag che comprende tutti gli elementi?
- 22. È possibile abbinare un intervallo in Scala?
- 23. Come posso ottenere il numero di core nel dispositivo cuda?
- 24. Regexp corrispondente nel maiale
- 25. Come posso definire un motivo regexp come costante in Perl?
- 26. MySQL | REGEXP VS Come
- 27. MySQL SELECT LIKE o REGEXP per abbinare più parole in un record
- 28. Come posso ridurre il numero di query?
- 29. Come posso contare il numero di bambini?
- 30. PHP Regexp negativo lookahead
L'inizio della stringa sarebbe '/ ^', non '/', fww. Personalmente non sono convinto che userò una regex per quello che stai cercando di fare, ma piuttosto un parser piccolo. Confondere le espressioni regolari è fonte di confusione. –
@DaveNewton - Sì, lo so. Ecco perché ho detto all'inizio della stringa abbinata. Forse avrei dovuto dire all'inizio della porzione abbinata della stringa. O quando inizia la partita, deve iniziare con un '' '. – Aust