Regex 마지막 발생?


122

나는 마지막 백 슬래시 이후 마지막 부분 잡으려고 노력하고있어
나는 필요 \Web_ERP_Assistant합니다 (로를 \)

내 생각은 :

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


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

하지만 찾을 수 없습니다.

[Regexer Demo]


2
귀하의 질문이 정규식과 관련된 것에 감사하지만 이것이 여기에서 사용하기에 가장 좋은 도구라고 확신합니까? 대부분의 표준 라이브러리에는 주어진 디렉토리에서 마지막 경로 이름을 검색하는 메소드가 있습니다. 이것은 또한 주어진 OS에서 디렉토리 구분자가 무엇인지 고려합니다.
Steve Rukuts 2011

@Raskolnikov 정규식에서 필요합니다. 나는 Pth.getFileNameWithoutExtension을 알고 있습니다. 문제는 정규식으로 태그가
Royi Namir에게

2
좋아요, 충분히 공평합니다. 그러면 정규식에 더 능숙한 사람들에게 맡기겠습니다.
Steve Rukuts 2011

답변:


95

부정적인 예측 솔루션은 다음과 같습니다.

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

Regexr에서 여기를 참조 하십시오.


2
(?:비 캡처 그룹의 시작이다. (가) .모든 문자이며,이 검사 그것이`으로 따르지 않으면 모든 문자.
stema

멀티 라인은 필요한 Regexr 테스트 전용입니다. 의 의미를 변경합니다 $. Standard는 문자열의 끝이며 Multiline은 행의 끝입니다. Regexr의 테스트 텍스트에는 여러 행이 있기 때문에이 옵션이 필요합니다.
stema

원래 질문과 동일한 reqeust를 원하지만 처음에 \가 없으면 어떻게합니까?
Royi Namir 2012-07-07

2
(?:[^\\/](?!(\\|/)))+$시작 부분의 슬래시를 제거하고 슬래시와 백 슬래시를 모두 처리합니다. 또한 슬래시가없는 경로의 전체 문자열과 일치합니다. 예 : manual.doc
mrswadge

5
Tempered Greedy Token에서 점은 항상 예견 뒤에 와야합니다 : (?:(?!\\).)+. ( ref ) 또한 RegExr의 예제는 두 개의 백 슬래시를 사용하여 경로 구성 요소를 분리합니다. 하나만 있어야하며 정규식은 하나만 일치 해야합니다 . ( 데모 )
앨런 무어

62

나를 위해 일한 것은 다음과 같습니다.

.+(\\.+)$

온라인으로 시도하십시오!

설명:

.+     - 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

15
: 부품의 브레이크 다운 주셔서 감사합니다
제이슨 브루스

1
특히 마지막 슬래시 (/)와 일치하는 정규식을 찾고있었습니다. 백 슬래시가 슬래시로 바뀔 때 @stema에 의해 위의 수락 된 답변이 작업을 수행합니다. 당신의 것은 모든 슬래시 다음의 모든 것과 일치하며 실제로는 해결책이 아닙니다. 귀하의 솔루션이 실제로 작동하지는 않았지만 설명이
간결

이것은 라인에서 중단되지 않는 한 부정적인 예측보다 훨씬 간단하고 일반적으로 낫습니다. 왜 지나치게 복잡합니까?
Scott Anderson

42

부정적인 전망은 정답이지만 다음과 같이 더 깔끔하게 작성할 수 있습니다.

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

이것은 \의 발생을 찾은 다음 일치하지 않는 검사에서 임의의 수의 문자 다음에 표시하고 싶지 않은 문자를 찾습니다. 음수이므로 일치하는 항목을 찾지 못한 경우에만 일치합니다.


4
이것은 마지막 백 슬래시와 일치합니다 . OP도 그 이후의 모든 것을 일치 시키려고합니다.
앨런 무어

매우 도움이되는이 깔끔한 버전은 백 슬래시 만 캡처했지만 모든 것을 클릭했습니다. 감사합니다.
Matt Binford

28

같은 문자열 끝에 고정 해 볼 수 있습니다 \\[^\\]*$. 작업에 정규 표현식을 반드시 사용해야하는지 확실하지 않지만.


2
이것은 나를 위해 잘 작동했습니다. ([^\/]*)$Linux 상자의 경로에있는 파일 이름과 일치합니다. ^이 맥락에서 캐럿 이 어떻게 작동 하는지 설명 할 수 있습니까 ? 나는 문자열의 시작을 나타내는 데만 사용했습니다.
Brad

@ 브래드, 부정입니다. 의미 [^\/]는를 제외한 모든 문자와 일치합니다 /.
마이클 Krelin - 해커

9

이 정규식은 어떻습니까? \\[^\\]+$


나는 그것이 정규식에 있어야한다고 생각하지 않습니다. 하지만 내 대답은 편집 할 수 있습니다
SERPRO

err ... 나는 그것이 정규식이어야한다고 생각하지 않지만, 확실히 그것을 포함 시키려면 매치에 들어가야합니다. 그것은 중요하지 않습니다. 나는 당신의 대답을 본 후에 무엇이 잘못 될 수 있는지 생각했습니다. 반대 투표를했고 이것이 제가 생각해 낸 것이므로 댓글을 달았습니다.
Michael Krelin-해커 2011-12-04

@michael, 오해하지 마십시오. 귀하의 의견에 감사드립니다. 정규식에 추가 할 필요가 없다고 생각했습니다. \;)
SERPRO

5

백 슬래시를 포함하지 않고 그 뒤에 텍스트 만 포함하려면 다음을 시도하십시오. ([^\\]+)$또는 유닉스의 경우 :([^\/]+)$


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.