2011-12-04 14 views
38

che sto cercando di catturare l'ultima parte dopo l'ultima barra rovesciata
ho bisogno del \Web_ERP_Assistant (con la \)Regex Ultima ricorrenza?

La mia idea era:

C:\Projects\Ensure_Solution\Assistance\App_WebReferences\Web_ERP_WebService\Web_ERP_Assistant 


\\.+?(?!\\)  // I know there is something with negative look -ahead `(?!\\)` 

Ma io non riesco a trovarlo .

[Regexer Demo]

+1

Apprezzo che la tua domanda riguardasse le regex, ma sei sicuro che questo sia lo strumento migliore da usare qui? La maggior parte delle librerie standard avrà un metodo che recupererà l'ultimo nome di percorso in una determinata directory. Ciò tiene anche conto di ciò che il separatore di directory è su un determinato sistema operativo. –

+0

@Raskolnikov Ho bisogno che in regex. Conosco il Pth.getFileNameWithoutExtension. La domanda è contrassegnata come regex –

+1

OK, abbastanza giusto, solo per essere sicuro. Lo lascerò alle persone più abili nelle regex. –

risposta

38

La soluzione lookahead negativo sarebbe per esempio essere questo:

\\(?:.(?!\\))+$ 

Guardalo here on Regexr

+0

cos'è '?:.' ??????? –

+0

se rimuovo la multiLine - non funzionerà. perché ? –

+0

Il '(?:' È l'inizio di un gruppo non catturante. '.' è un qualsiasi carattere, questo controlla qualsiasi carattere se non è seguito da un' \ '. – stema

19

Si può provare l'ancoraggio alla fine della stringa, qualcosa come \\[^\\]*$. Anche se non sono sicuro se si deve assolutamente usare regexp per l'attività.

+1

Questo ha funzionato alla grande per me. '([^ \ /] *) $' corrisponde al nome del file in un percorso per una macchina Linux. Puoi spiegare come il '' '' 'funziona in questo contesto? L'ho sempre usato solo per indicare l'inizio delle stringhe. – Brad

+0

@Brad, è la negazione. Il significato di '[^ \ /]' corrisponde a qualsiasi carattere tranne per '/'. –

1

Che dire di questo regex: \\[^\\]+$

+0

Non vorrei downvotare, ma l'OP ha detto "con' \\ "". –

+0

Beh, non credo che sia necessario essere nell'espressione regolare. Ma modificherò la mia risposta – SERPRO

+0

err ... Non penso che dovrebbe essere regex affatto, ma certamente per la corrispondenza per includerlo, dovrebbe essere dentro. Non è importante, ho solo pensato a cosa potrebbe avere torto sulla tua risposta dopo aver visto che è stato downvoted e questo è stato quello che mi è venuto in mente, quindi ho commentato. –

22

Uno sguardo negativo avanti è una risposta corretta, ma può essere scritto in modo più pulito come:

(\\)(?!.*\\) 

Questo sembra per un evento di \ e poi in un assegno che non viene abbinato, cerca un numero qualsiasi di caratteri seguito dal personaggio che non vuoi vedere dopo di esso. Perché è negativo, corrisponde solo se non trova una corrispondenza.

+1

Questo corrisponde all'ultima barra inversa * solo *. L'OP vuole abbinare anche tutto ciò che segue. –

11

Uno che ha lavorato per me era:

.+(\\.+)$ 

Try it online!

Spiegazione:

.+  - any character except newline 
(  - create a group 
\\.+ - match a backslash, and any characters after it 
)  - end group 
$  - this all has to happen at the end of the string 
+3

Grazie per l'interruzione delle parti :) –

+1

$ - non significa fine della linea, significa fine della stringa. – rayzinnz

1

ho usato sotto regex per ottenere quel risultato anche quando il suo finito da un \

(\\[^\\]+)\\?$ 

[Regex Demo]