Ho esaminato le funzioni regex nella libreria regex POSIX e nella libreria PCRE, ma entrambe non sembrano avere una funzione di sostituzione delle stringhe. Non voglio usare C++, e sarebbe meglio se non ho bisogno di collegare un'altra libreria (ma posso farlo se devo). Devo eseguire manualmente la sostituzione della stringa? In tal caso, come posso utilizzare i gruppi di cattura?Come sostituire le stringhe regex in puro C?
risposta
regex.h non fornisce supporto nativo per la sostituzione di stringhe, tuttavia fornisce sub-espressioni/gruppi di cattura che lo rendono molto più semplice. Immagino che tu abbia familiarità con le compilation regex e salti per regex l'esecuzione e le sottoespressioni.
regexec() è definito come segue regex.h (/ usr/include /):
extern int regexec (const regex_t *__restrict __preg,
const char *__restrict __string, size_t __nmatch,
regmatch_t __pmatch[__restrict_arr],
int __eflags);
Il primo, secondo, e gli argomenti finali sono la regex, stringa da eseguire su e bandiere esecuzione , rispettivamente. Il terzo e il quarto argomento sono usati per specificare una matrice di regmatch_t. Un regmatch_t consiste di due campi: rm_so e rm_eo, che sono gli indici, o offset, rispettivamente dell'inizio e della fine dell'area corrispondente. Questi indici possono quindi essere utilizzati insieme a memcpy(), memset() e memmove() da string.h per eseguire la sostituzione di stringhe.
Farò un piccolo esempio e pubblicarlo più tardi.
Buona fortuna, e spero che questo abbia aiutato.
+1 con risposte come questa dovresti avere più di 308 ripetizioni! –
* Farò un piccolo esempio e pubblicarlo più tardi. * Quando? Hai fatto questa promessa 5 anni fa. ; [Ecco qui (http://stackoverflow.com/questions/1085083/regular-expressions-in-c-examples) alcuni esempi che ho trovato finora. –
La libreria PCRE non fornisce una funzione di sostituzione, ma è disponibile una funzione wrapper nella pagina di download PCRE che accetta la sintassi perl stile =~ s/pattern/replace/
e quindi utilizza le funzioni native PCRE per eseguire una sostituzione/sostituzione. Vai a http://www.pcre.org/ quindi fai clic sul collegamento Download: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/, quindi sulla directory Contrib. Il pacchetto/progetto desiderato è: pcrs-0.0.3-src.tar.gz
.
Nota che non l'ho usato da solo, quindi non posso testimoniare come funziona. È comunque un pezzo di codice abbastanza piccolo e semplice, quindi potrebbe benissimo servire al tuo scopo.
Ciao, grazie per il link. usa pcrs nel mio programma? Attualmente utilizzo le funzioni pcre_compile e pcre_exec come qui http://stackoverflow.com/a/1421923/1729501 – user13107
- 1. C# per sostituire le stringhe di testo in un documento
- 2. Come sostituire lookahead in regex?
- 3. Come sostituire le stringhe con javascript?
- 4. Spezzare le stringhe in Python usando regex
- 5. Regex sostituire tutte le virgole con valore
- 6. Arduino in puro C
- 7. Regex, sostituire tutte le occorrenze del sottogruppo
- 8. Come posso sostituire le stringhe in un memo (FastReport)?
- 9. Regex: come rimuovere spazi aggiuntivi tra le stringhe in Perl
- 10. stringa regex sostituire
- 11. Come sostituire in WebStorm/PhpStorm con regex
- 12. Regex che convalida le stringhe csv
- 13. Java - estrarre le stringhe con Regex
- 14. Vim Regex Sostituire
- 15. sostituire JavaScript/regex
- 16. (g) vim sostituire regex
- 17. Liberare le stringhe in C
- 18. Notepad regex ++ sostituire
- 19. Aprire un file e sostituire stringhe in C#
- 20. Un modo migliore per sostituire molte stringhe - offuscamento in C#
- 21. Python: sostituire con regex
- 22. Come sostituire le risorse di stringhe con Android Gradle
- 23. Java; Sostituire le stringhe (usando le espressioni regolari)?
- 24. manipolazione in puro C Eccezione
- 25. Objective-C: come sostituire le entità HTML?
- 26. Sostituire le virgolette attorno alle stringhe in Vim?
- 27. eclipse - regex: sostituire più gruppo
- 28. Le espressioni lambda/delegate in C# "puro" o possono essere?
- 29. sostituire migliaia separatori in csv con regex
- 30. Swift sostituire la sottostringa regex
A quali gruppi di cattura si riferisce? Non esiste una libreria C incorporata per la regex, dovrai usare pcre o somithing in questo modo. – lvella
In generale non è possibile eseguire sostituzioni di stringhe all'interno di una stringa C: potrebbe non essere disponibile la memoria. Puoi chiarire che cosa stai cercando di fare esattamente? –
Quindi vuoi che io sia specifico? Ho un'intestazione di richiesta HTTP che voglio usare regex per cambiare e inoltrare al server. – Yifan