Regex Terakhir terjadi?

122

Saya mencoba untuk menangkap bagian terakhir setelah garis miring terbalik terakhir,
saya membutuhkan \Web_ERP_Assistant(dengan \)

Ide saya adalah:

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


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

Tapi saya tidak bisa menemukannya.

[Regexer Demo]

Royi Namir
sumber
2
Saya menghargai bahwa pertanyaan Anda berkaitan dengan regex, tetapi apakah Anda yakin ini adalah alat terbaik untuk digunakan di sini? Kebanyakan pustaka standar memiliki metode yang akan mengambil nama jalur terakhir dalam direktori tertentu. Ini juga memperhitungkan apa pemisah direktori pada OS tertentu.
Steve Rukuts
@Raskolnikov Saya membutuhkannya di regex. Saya tahu Pth.getFileNameWithoutExtension. PERTANYAAN ini ditandai sebagai regex
Royi Namir
2
Oke, cukup adil, pastikan saja. Saya akan menyerahkannya kepada orang-orang yang lebih terampil dalam ekspresi reguler.
Steve Rukuts

Jawaban:

95

Solusi lookahead negatif Anda misalnya seperti ini:

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

Lihat di sini di Regexr

stema
sumber
2
Ini (?:adalah awal dari grup tanpa penangkap. The .is any character, ini memeriksa setiap karakter jika tidak diikuti oleh ``.
stema
Garis Multi hanya untuk tes Regexr diperlukan. Itu mengubah arti dari $. Standar adalah akhir dari string, dengan Multiline sebagai akhir baris. Karena teks percobaan di Regexr memiliki beberapa baris, saya memerlukan opsi ini di sana.
stema
bagaimana jika saya menginginkan reqeust yang sama dengan pertanyaan awal saya, tetapi tanpa \ di awal?
Royi Namir
2
(?:[^\\/](?!(\\|/)))+$menghilangkan garis miring di awal dan mengatasi garis miring ke depan dan ke belakang. Hal ini juga sesuai dengan seluruh string untuk pathes tanpa garis miring di dalamnya misalnya manual.doc
mrswadge
5
Dalam Greedy Token Tempered, dot harus selalu datang setelah lookahead: (?:(?!\\).)+. ( ref ) Selain itu, contoh Anda di RegExr menggunakan dua garis miring terbalik untuk memisahkan komponen jalur; seharusnya hanya ada satu, dan ekspresi reguler hanya cocok dengan satu. ( demo )
Alan Moore
62

Salah satu yang berhasil untuk saya adalah:

.+(\\.+)$

Cobalah secara online!

Penjelasan:

.+     - 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
Jeeter
sumber
16
Terima kasih atas kerusakan bagian-bagiannya :)
Jason Bruce
1
Saya secara khusus mencari regex yang cocok dengan garis miring terakhir (/). Ternyata jawaban yang diterima di atas oleh @stema berfungsi saat garis miring terbalik diganti dengan garis miring ke depan. Milik Anda cocok dengan semua yang mengikuti SETIAP garis miring, yang sebenarnya bukan solusi yang dicari. Saya memuji jawaban Anda karena penjelasan Anda, berhasil, meskipun solusi Anda tidak benar-benar
berfungsi
Ini jauh lebih sederhana dan umumnya lebih baik daripada pandangan negatif, selama itu tidak terputus, mengapa terlalu rumit?
Scott Anderson
42

Pandangan negatif ke depan adalah jawaban yang benar, tetapi dapat ditulis dengan lebih rapi seperti:

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

Ini mencari kemunculan \ dan kemudian di cek yang tidak cocok, itu mencari sejumlah karakter yang diikuti oleh karakter yang tidak ingin Anda lihat setelahnya. Karena negatif, hanya cocok jika tidak menemukan kecocokan.

Waktu
sumber
4
Hal ini sesuai dengan garis miring terbalik terakhir hanya . OP juga ingin mencocokkan semuanya setelahnya.
Alan Moore
Sangat membantu, versi yang lebih bersih ini, meskipun hanya menangkap garis miring terbalik, membuat semuanya klik. Terima kasih.
Matt Binford
28

Anda bisa mencoba menancapkannya ke ujung string, seperti \\[^\\]*$. Meskipun saya tidak yakin apakah seseorang benar-benar harus menggunakan regexp untuk tugas tersebut.

Michael Krelin - peretas
sumber
2
Ini bekerja dengan baik untuk saya. ([^\/]*)$cocok dengan nama file di jalur untuk kotak Linux. Bisakah Anda menjelaskan cara kerja tanda sisipan ^dalam konteks ini? Saya hanya pernah menggunakannya untuk menandai awal string.
Brad
@Brad, itu negasi. Arti [^\/]cocok dengan karakter apa pun kecuali /.
Michael Krelin - peretas
9

Bagaimana dengan regex ini: \\[^\\]+$

SERPRO
sumber
Saya rasa itu tidak perlu di regex. Tetapi saya akan mengedit jawaban saya
SERPRO
err ... Saya tidak berpikir itu harus regex sama sekali, tapi yang pasti untuk pertandingan memasukkannya, itu harus masuk. Bukan itu masalah, saya baru saja memikirkan apa yang bisa salah tentang jawaban Anda setelah melihatnya tidak dipilih dan inilah yang saya temukan, jadi saya berkomentar.
Michael Krelin - hacker
@ michael, jangan salah
paham
5

Jika Anda tidak ingin menyertakan garis miring terbalik, tetapi hanya teks setelahnya, coba ini: ([^\\]+)$atau untuk unix:([^\/]+)$

Katja
sumber
2

Saya menggunakan regex di bawah ini untuk mendapatkan hasil itu juga ketika diselesaikan oleh a \

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

[Regex Demo]

shA.t
sumber