2017-10-25 11 views
1

나는 하나의 점 및 파일 이름을 가진 파일 이름의 유효성을 검사하는 정규 표현식을 구축을 위해 노력하고이 세 부분은 밑줄정규식이 아래 내 정규식

로 구분 한 하나의 점으로 파일 이름을 적용합니다

ABA_ABA_2015478.js.csv를 실패 할 경우 - - 입력 문자열

ABA_ABA_2015_478.csv는

를 실패 할 경우 0

ABC_BCD_XYZ.js - 전달해야합니다

도와주세요.

+1

'^ (? [^ _] *) _ (? [^ _] *) _ (? [^ _] *) \. [^ _.] * $' –

답변

0

는이 정규식을 사용할 수 있습니다

^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\.[^.]+$ 

RegEx Demo

당신이 다음 앵커가 암시이기 때문에 앵커를 사용할 필요가 없습니다 자바에서 matches() 방법을 사용하는 경우.

정규식 해체 :

  • ^ : 시작
  • (?<appname>[^_.]+) 매치와 그룹 어떤
  • (?<eventtype>[^_.]+)_ 도트 아닌 1+ 길이의 캐릭터 매치와 그룹 1의 모든 문자 + 길이는 _이 아니며 점은
  • _ : 일치 a _
  • (?<counter>[^._]*) 매치와 그룹 _ 도트 아닌 1+ 길이의 문자
  • \. :
  • $ 도트되지 1+ 길이의 모든 문자를 일치 : 끝
  • [^.]+을 일치 자바 사용을 위해

:

final String re = "^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\\.[^.]+$"; 
+0

죄송합니다, 늦었습니다. 나는 여전히 왼쪽 부분에서 도트를 제거하는 단계이다. 좋은 데모 tho, 나는 그것을 많이 사용 기억 해요. – Vlasec

+1

글쎄, 왼쪽 부분은 여전히 ​​점들을 포함 할 수 있습니다.appname이나 eventtype에 표시해야하지만 실제로 문제가 발생할 가능성이 큰 카운터에서 실제로 제거했습니다. – Vlasec

+0

감사, 좋은 지적 – anubhava

0

정규 표현식에서 점 문자는 "임의의 문자"를 의미합니다. 백 슬래시를 사용하여 이스케이프 처리해야합니다 (Java에서는 역 슬래시를 두 번 사용하여 Java 문자열에서 백 슬래시 자체를 이스케이프 처리해야합니다).

오른쪽 부분에 대해서는 과 같은 문자를 사용할 수 있습니다. 또한 왼쪽 부분에서 부품에서 도트를 제외하십시오 ([^_.]* 또는 비어 있지 않은 경우 [^_.]+).