2012-01-23 4 views
1

미리보기 이미지를 아직 만들지 않은 파일과 일치시키고 싶습니다.부분 문자열이 문자열에없는 경우 Regex Match

그래서 만든 두 개의 작은 이미지를했다 이미지에 대한 : 일부 정규식은 image1.png 일치하는

image1-100x100.png 
image1-350x350.png 
image1.png 

내가 찾고 있어요.

는 내가 지금 가지고하면 확장을 선택하는 경우 : .jpg 또는 .png 다음

(?!(-(100x100|350x350)))(\.(jpg|png)) 

답변

3

이 시도 :

는 설명이
^(?!.*-(?:100x100|350x350)).*\.(?:jpg|png)$ 

:

^      # Start of string 
(?!     # Assert that it's impossible to match... 
.*     # any string, followed by 
-     # a dash, followed by 
(?:100x100|350x350) # 100x100 or 350x350 
)      # End of lookahead. 
.*     # Then match any string 
\.     # followed by a dot 
(?:jpg|png)   # and a jpg/png extension. 
$      # End of string 
+0

파일 이름이'image1-200x200.png'이면 어떻게 될까요? – anubhava

+0

영리한 당신. 일반적으로 축소판 크기는 파일 이름보다 표준화되어 있지만, 가변적 인 경우 고려해야합니다. 규칙은 추측 이상의 것을하기에 충분히 명확하게 정의되지 않았습니다. –

+0

불완전하고 모호한 요구 사항이있는 질문 중 하나입니다. – anubhava

2

하나 이상의 비 하이픈 : 부정적 예측에 대한

^[^-]+\.(?:jpg|png)$ 

필요가 없습니다. (기존 정규식 그냥 (\.(jpg|png)) 실제로 같다고 참고 : 내다가 실제 효과가 없습니다, 어떤 문자열이 접두어로 접두어 (-(100x100|350x350))(\.(jpg|png))이 없다 할 수 있기 때문이다.)


편집을 추가합니다 : 질문에 다소 모순이있는 것처럼 보입니다. 처음에는 미리보기 이미지를 만들지 않은 파일과 일치시키고 싶다고 말하면서, 예를 들어, 과 일치시키고 싶다고 말하면 에는 두 개의 미리보기 이미지가 생성되었습니다.

제 생각에는 이미지가 미리보기 이미지인지 확인하는 방법에 대한 명확한 규칙을 제시하지 마십시오. 위의 그림에서 가장 간단한 방법을 사용했습니다. 축소판의 파일 이름에 하이픈과 다른 이미지가 포함되어 있다고 가정합니다. 또는 축소판 이미지의 가장 좁은 정의를 취하고 파일 이름이 .jpg 또는 .png으로 끝나고 그 앞에 -100x100 또는 -350x350이없는 파일은 비 미리보기 이미지입니다. 이 경우 다음과 같이 쓸 수 있습니다.

^.*(?<!-100x100)(?<!-350x350)\.(?:jpg|png)\z 

네거티브 lookbehind를 사용합니다. . . 부정적인 lookbehind를 지원하는 regex-engine을 가정합니다.

^(?:[^-]|-(?!(?:100x100|350x350)\.(?:jpg|png)\z))*\.(?:jpg|png)\z 

을하지만 그것은 단지 두 개의 정규 표현식에 사용하는 것이 훨씬 간단합니다 : (? 당신은 당신이 사용중인 언어를 언급하지 않음) 부정적인 lookbehind없이, 우리는 대신 쓸 수

\.(?:jpg|png)\z 
-(?:100x100|350x350)\.(?:jpg|png)\z 

및 요구 이 아니고이 두 번째 문자열과 일치해야합니다. 귀하의 질문은 당신이 하나의 긍정적인 정규식으로 이것을하고자 함을 암시하지만, 당신은 왜 언급하지 않습니까?

+0

가 ㅎ 아주 명백한 : 당신의 이름은'이다 – keymone

+0

어떤 경우 같은 대답을 게시 막습니다 new-image.png'? –

+0

@TimPietzcker : 그럼 분명히 그것은 'new.png'라는 이미지의 크기가'image' 인 썸네일입니다. 이런! (더 진지하게 : 나의 개인 정책은 요구 사항이 명확하지 않은 정규 표현식을 구성 할 때 * 그럴듯한 * 요구 사항을 충족시키는 가장 단순한 정규식을 선택하고 그 결과를 문서화하는 것입니다. 충분하지 않다면, 그 밖의 일이 없다면, OP가 요구 사항을 구체화하도록 도왔습니다.) – ruakh

1

^(.+)(?!(-((\d+)x(\d+))))(\.(jpg|png))$

+1

죄송하지만 잘못된 것입니다. '(?! ...)'는 당신이 생각하는대로 작동하지 않습니다. – ruakh

관련 문제