2014-03-26 2 views
0

헤더 인 키워드를 확인하고 입력이 완전히 제어 할 수 없습니다.정규식에서 FOO 또는 BAR 또는 Foo 또는 Bar를 테스트하는 가장 좋은 방법은 무엇입니까?

그래서 첫 번째 문자는 대문자로 표시 될 것이지만 모든 대문자로 표시 될 것임을 알았습니다.

내가는 자바 패턴 수행 할 수

Pattern test = Pattern.compile("\\b(FOO|BAR|Foo|Bar)\\b"); 

을 그리고 그와 패턴 매처을하는 것은 잘 작동합니다. 내가 확인하는 6 개 또는 8 키워드가있는 경우

boolean ans = test.matcher(sometext).find(); 

그러나이 두 번 가지 추한이 모든 키워드를 가지고 갈 수있는 시작을 위해 : 마찬가지로.

누구나이 일을 할 수있는 좀 더 우아한 정규식을 생각해 낼 수 있습니까?

감사

나를 그냥 처음이었다 무엇을 제안이다, 완전히 케이스를 무시로, 그 간단하지를 다시 강조하자

3/26/15을 추가했습니다. 첫 번째 문자는 대문자로 입력해야하며 나머지 문자열은 위 또는 아래 일 수 있습니다.

+0

대부분의 정규식 엔진은 'IGNORECASE'에 대한 'I'옵션이 있습니다 - 나는 자바가 너무 않습니다 내기,하지만 난 그것을 정확하게 어떻게 될지 모른다. 너무 일치 (예 : fOo)하지만 문제입니까? [편집 : 어쩌면 'Pattern test = Pattern.compile ("\\ b (foo | bar) \\ b", Pattern.CASE_INSENSITIVE);]] – TessellatingHeckler

+0

일단 패턴을 컴파일하면 실제로는 문제가되지 않습니다. 생성 된 상태 머신을 통과하는 많은 통과 경로 (수백만을 말하는 것이 아니라면 메모리가 부족할 수 있음). 편의상, 코드 목록을 프로그래밍 방식으로 생성하는 것이 좋습니다. 복잡한 정규 표현식에서 오타를 디버깅하는 것이 쉽지 않기 때문에 코드를 쉽게 유지 관리 할 수 ​​있기 때문입니다. – tripleee

답변

0

은 "사건을 무시"플래그 (?i) 사용 : 당신은 일반적으로 단어로보다는 acharacter 클래스로서 취급되어 오는 것도 있기 때문에 \\b\\b 필요하지 않습니다

Pattern test = Pattern.compile("(?i)\\b(FOO|BAR)\\b"); 
0

합니다.

i (ignoreCase) 수정 자도 사용하십시오.

귀하의 정규식은 다음과 같아야합니다

(foo|bar) 

추가, i 수정, 당신은 "테스트"말을하는 언어 또한

에 따라. 그걸 위해 정규식을 사용하는 것은 잔인합니다.

이를 수행

String Str = new String("Welcome to Foo bar "); 
Str = Str.toLowerCase(); 
return Str.contains("foo")||Str.contains("bar"); // returns true or false 
관련 문제