2014-09-27 2 views
0

Regex Expressions를 처리하는 방법을 배우려는 중이며 연습 문제가 있지만 해결 방법이 없습니다. 한 가지 질문은 'if'를 제외한 모든 소문자 단어입니다.Regex Express

[a-z][a-z]^[if] | [a-z][a-z][a-z]+ 

난 단어 두 글자 이상을 가지고 기대 :

는이 같은이 일이 할 수 있습니다. 그래서 세 개 이상의 모든 단어는 괜찮습니다.

+0

몇 가지 예제를 게시하십시오.'fooifbar'와 일치하길 원했습니까? –

+0

실험하려는 경우 [regetron] (https://gitorious.org/regetron) – DOOM

+0

"적어도 2 개"에도 2 개가 포함되어야합니다. '|'주위의 공백에주의하십시오. 공백은 패턴 일치에 포함됩니다. www.regex101.com은 좋은 실험 사이트입니다. – BUSY

답변

1

은 음 ... 전체 실제 솔루션은 그런 일이 될 것입니다 :

\b(?!if\b)\p{Ll}+\b 

Demo

하지만 잘, "높은 수준"정규식 당신이 배울하지 않았다, 그것의 가정 아직.

그럼 간단하게합시다. 당신이 3 자 미만의 단어를 무시하고 받아 들일 수있는 경우에, 당신이 쓸 수 있습니다 :

\b[a-hj-z][a-eg-z][a-z]+|i[a-z]{2,} 

Demo

처음 두 문자 클래스는 [a-z]if없이 각각이다. 당신이 3 자 미만의 단어를 포함 할 경우

이 할 것 :

\b(?:i|if[a-z]+|i[a-eg-z][a-z]*|[a-hj-z][a-z]*)\b 

Demo

그러나이 시점에서 복잡해진다 ... 두

+0

설명 주셔서 감사합니다 – user1550036

+0

첫 번째 정규식은 단일 문자와 일치합니다. –

+0

@AvinashRaj 예, 그것이 요점이었습니다. 저는 3+ 편지 요구 사항을 완화하려고했습니다. 결국 "a"는 여전히 단어입니다. –

1

모든 시퀀스 또는 "if"를 제외한 소문자보다 많습니다.

[a-hj-z][a-z]+|i(?:[a-eg-z][a-z]*|f[a-z]+) 
부정적인 모습 미리와3210

, 당신은 또한 수행 할 수 있습니다

(?!if\b)[a-z]{2,} 
1

간단한 해결책은 당신이 교대 연산자의 왼쪽에 무시하고 당신이 캡처에서 일치하고 싶은 배치 할 어떤에 배치하는 것 시도하고 있던 교대 연산자의 오른쪽에있는 그룹.

\bif\b|([a-z]{2,}) 

참고 : 문자 클래스의 캐럿 ^ 외부는 부정을 의미하지 않는다,이 문자열의 시작 위치를 주장한다. x (자유 간격) 한정자를 사용하지 않는 한 교대 사이의 공백을 제거해야합니다.