2012-04-17 2 views
1

에서 나는의 단어가 포함되어 있는지 확인하기 위해 문장을 검색하는 간단한 정규식을 가지고 있지 |에 대한 |에 |에서 여기에 거의 regexpal에서 일하고 내 정규식 :정규식은 regexpal에서 작업하지만, 자바

의 [^ A-ZA-Z] |에 대한 |의 | 나는 다음 setences에서 실행 [^ A-ZA-Z]

에서 :

show me the weather of seattle 
show me the weather in seattle 
show me the weather for seattle 
show me the weather at seattle 

및 위치 결과 :

enter image description here

Java 코드에서 사용할 때 전혀 작동하지 않습니다. regexpal에서 너무 시작과 끝 부분에 정의 된 공간을 보여줍니다. 누군가 내 정규 표현식에 문제가 있는지 말해 줄 수 있습니까? 문장에서 많은 단어 중 하나를 검색하는 방법

나는 항상 그 정규 표현식과 일치하지 않는 것을 의미하는 내 Java에서 조건을 얻습니다.

public class Regex 
{ 
public static void main(String[] args) 
{ 
    String str = "show me the weather in seattle"; 

    if(str.matches("[^A-Za-z]of|for|in|at[^A-Za-z]")){ 
     System.out.println("Yayyy!!"); 
    } 
    else{ 
     System.out.println("OMG now what to do"); 
    }  
} 
} 
+2

'matches' 문자열이 완전하게 검사합니다. 그것은 성냥을 찾는 것이 아닙니다. '. *'을 start에 추가하고 regexp – turbanoff

+3

을 끝내십시오. "space"는 "of"앞에 있고 "at"뒤에 있습니다. [^ A-Za-z] (of | in | at) [^ A-Za-z]'또는 더 나은 '\\ W (for | in | at) \\ W' –

+0

@turbanoff 나는 시도했다. * 그러나 문제는 날씨와 시애틀에 있기 때문에 "at"을 제거 할 때 "날씨 시애틀을 보여줘"와 일치하는 것입니다. 그래서 나는 [^ A-Za-z] – Yogesh

답변

1

아니요 .*[^A-Za-z](of|for|in|at)[^A-Za-z].*? 물론 for | in |이 단어의 시작이나 끝 인 경계 케이스를 확인하려면 추가 작업이 필요합니다.

+0

감사합니다. 그것은 작동합니다. 나의 진술에서 그 단어들은 진술들 사이에서만 나타날 것이다. 감사합니다. – Yogesh

+0

'. * '은 전혀 필요 없습니다. 정규 표현식은 집합의 단어 앞뒤에있는 비 문자에 바인딩됩니다. '. * '를 추가하는 것은 완전히 불필요하고 무의미합니다. –

+0

@EliSand'mathes' 메쏘드가 전체 문자열이 정규 표현식에 의해 매치되는지를 확인한다는 것을 이해하지 못하셨습니까? 그것과 같습니다. 그래서 당신의 가정은 경기 전후의 문자열에 다른 "문자"가 없을 때에 만 작동합니다. 그래서 여기서는 - 어떤 글자이든간에, 어떤 글자이든, 어떤 글자이든, "글자가 아닌 글자", "글을 쓰고 싶은 글자", "글자가 아닌 글자", "글자가 더 많을 수도 있습니다."-) –

1
[^A-Za-z](?:of|for|in|at)[^A-Za-z] 

당신은 그룹에 "또는"일치합니다, 그렇지 않으면 당신이 의미 있다고 생각한다 : 당신이 원하지 않는 어떤 가능성이 높다

[^A-Za-z]of OR for OR in OR at[^A-Za-z] 

여기 내 자바 코드입니다.

+0

Pro-tip :'()'안에있는'? :'부분은 일치하는 항목을 그룹으로 만 만들었지 만 일치 항목으로 사용할 수 없거나 기술적 인 점보 설명이 뭐든간에. –

+0

정규 표현식은 있지만 java에서는 동작하지 않습니다. 자바 코드에서 else case로 다시 간다. str.matches()를 호출하기 위해 뭔가를 추가해야 할 필요가있다. 그리고 그렇습니다. 나는 1 of or for 또는 in 또는 at을 원합니다. 그의 문장에서 사용자가 [of | for | in] 중 하나를 가지고 있는지를 볼 수 있기를 원합니다. – Yogesh

+0

정규 표현식으로 실제로 무엇을 달성하려고 하는지를 이해한다면'\ b (for | in | at) \ b'을 사용합니다. 또한,'.matches()'는 true/false를 반환하거나 테스트 할 수있는 조건을 반환합니까? –