2012-01-11 13 views
12

Sto usando Eclipse e Notepad ++ per eseguire la sostituzione più file (xml & java)Caso sostituzione di stringa sensibili in Eclipse o Notepad ++

che sto cercando di sostituire [PP] roduct [mm] brace con [FF] und [Mm] ember in una sola sostituzione e preservando la custodia.

ProductMember -> FundMember 
productMember -> fundMember 
productmember -> fundmember 

Utilizzando gruppi di cattura è facile mantenere il caso del M da Stati, ma sono senza tracce per la sostituzione P.

Grazie per l'aiuto!

+0

Non sono sicuro se è possibile farlo con regex. Perché hai bisogno di farlo in una ricerca e sostituzione? – 4ndrew

+0

La ricerca e la sostituzione devono essere eseguite in 10 cartelle. Farlo in una singola sostituzione riduce il rischio di errori poiché richiederei 10 ricerche e sostituisci invece di 20. – jpboudreault

+0

@leconcombreless In tal caso, consiglio di utilizzare gli script. O refactoring in IDE se possibile. – 4ndrew

risposta

18

in Eclipse è possibile utilizzare l'espressione regolare mantenere il caso dell'operatore: \ C. Per risolvere il tuo esempio dovresti cercare "Prodotto", sostituire con "\ CFund" (assicurati di selezionare l'opzione Espressione regolare). Questo sostituirà il prodotto con il fondo e il prodotto con il fondo.

+0

Se funziona, devono esserci casi in cui non è così. L'ho appena provato su CamelCasedWord che volevo sostituire con AnotherCamelCasedWord e nonostante il \ C ha sempre eseguito una sostituzione diretta senza cambiare caso dove dovrebbe. – user1283068

+0

Non sono riuscito a farlo funzionare fino a quando non mi sono accorto di aver selezionato la casella "Maiuscole/minuscole", dopo averla deselezionata, la sostituzione funzionava come previsto. – codebox

0

np regex ++ è molto povera, è possibile utilizzare un perl one-liner per fare il lavoro:

perl -pi.back -e's{(productmember)}{ uc fundmember | (uc $1^$1) . (uc(substr $1, -1)^substr $1, -1) x (length($new) - length $1) }egi;' theFile 

Estratto dal perl faq6

Problemi correlati