2012-06-15 2 views
2

PHP에서 코드가 있습니다. preg_grep을 사용하여 여러 단어를 어떤 순서로나 어떤 문맥에도 존재할 수 있도록했습니다. 나는 그것을 자바로 변환하려고하는데, 알아낼 수 없다. 정규식 문자열에 키워드를 변환자바 패턴 매칭

내 PHP 코드는 다음과 같습니다

function createRegexSearch($keywords) 
{ 
    $regex = ''; 
    foreach ($keywords as $key) 
     $regex .= '(?=.*' . $key . ')'; 
    return '/^' . $regex . '/i'; 
} 

그것은 유사한 정규식 문자열을 만들 것입니다 : /^(?=.*bot)/i - 로봇과 일치해야합니다, 로봇, 봇 등. 동일한 정규 표현식 문자열은 나를 혼란스럽게하는 자바에서 작동하지 않는 것 같습니다. 현재 자바에서 나는 contains와 비슷한 효과를 만들었지 만 정규 표현식을 사용하려고한다. 첫 세트 (PHP 코드) \의 내가 사용 이후에 민감한 경우를 작동합니다 있도록 문자열이 포함

for (Map.Entry<String, String> entry : mKeyList.entrySet()) 
{ 
    boolean found = true; 
    String val = entry.getValue().toLowerCase(); 
    for (int i = 0; i < keywords.length; i++) 
    { 
     if (!val.contains(keywords[i].toLowerCase())) 
      found = false; 
    } 

    if (found) 
     ret.add(entry.getValue()); 
} 
+0

작동하지 않는 Java 코드를 게시 할 수 있습니까? – gcochard

답변

1

한 가지는 "일치"대상에 대한 정규식의 두 가지 방법이있다 예를 들어 대상 문자열 robots에서 find().*bot 할 수있을 때 - 을 발견하면서 시작과 표현식의 끝에서 ^$ 퍼팅하는 것과 동일합니다 (이 문자열에있을 수 있습니다 곳) 첫 경기를 찾습니다 그것은 matches() 표적이라고 말하는 것이 사실이 아닐 것입니다 ... 나는 그 표제어가 어떻게 ght가 영향을 미칩니다 ...

게시 된 Java 코드 (문제가 있음)가 없으면 잘못 될 가능성이 있음을 알려주지 못하지만 내 생각에이 영역에 쉽게 포함될 수 있습니다.

또한 표현식 끝 부분에 Java (및 .Net)를 넣는 것과 동일한 표현식 (또는 대소 문자를 구분할 영역)의 시작 부분에 (?i)을 붙입니다. 따라서, /[a-f0-9]/i 당신은 내장 플래그 확장을 사용할 수 있습니다 (?i)[a-f0-9]

0

는 대소 문자를 구분합니다. 그러나 자바 코드는 대소 문자를 구별합니다. 그래서 행동에 차이가있을 것입니다.

이렇게 차이가 나는 경우 포함 체크 전에 toUpperCase()와 같이 양쪽 끝을 특정 char 세트로 변환합니다.

또한 자바 코드가 아닌 PHP 코드에서 정규 표현식을 사용하고 있습니다. 그 이유는 무엇입니까? ") (찾아"대 "일치()"- - 경기가

감사 Ajai G 자바가 많은 언어와 다르게한다는 것을

+0

예, PHP에서 사용한 정규식 코드가 java에서 작동하지 않는 것 같습니다. 나는 소문자로 모든 사건을 바꿀 수 있지만 그것은 데이터 집합에 대해 내가 생각하는 정규식으로 줄일 수있는 약 0.5 초 정도 걸릴 것 같습니다 – Joseph

0

에 해당합니다 (? I) 그래서 당신은 봇, 로봇, 로봇과 로봇에 맞게 사용되어야하는 정규식이 어느 String.matches 또는 패턴 (Pattern)과 함께 작동합니다 (?i)^(.*bots?)$입니다/Matcher