2010-12-02 2 views
1

정규식 패턴 - ([^=](\\s*[\\w-.]*)*$)자바 정규식 엔진 충돌

테스트 문자열 - paginationInput.entriesPerPage=5

자바 정규식 엔진 충돌/경기 찾는 시대 (> 2mins)을 복용합니다. 이것은 다음 테스트 입력의 경우에는 해당되지 않습니다 :

paginationInput=5 

paginationInput.entries=5 

내 요구 사항은 =오른쪽에 문자열 잡아 무언가로 대체하는 것입니다. 위의 패턴은 위에서 언급 한 입력을 제외하고는 잘하고 있습니다.

왜 내가 오류를 이해하고 다른 정규식을 피하기 위해 어떻게 정규식을 최적화 할 수 있는지 알고 싶습니다.

+3

정규식이 과장된 것 같습니다.이 파일의 각 줄마다 testString.split ("=")을 사용하고 길이 == 2인지 확인해 보셨습니까? 그러면 배열이 반환되고 두 번째 항목은 = –

+0

의 오른쪽이됩니다. 그렇게하는 것은 자연스러운 방법입니다. 나는 그것을 최후의 수단으로 남겨두고있다. – kaychaks

+1

정규식에서 너무 많은 역 추적이 허용되므로 일치하지 않는 스택 오버플로가 발생했을 수 있습니다. 중첩을 피하거나 소유욕을 발휘할 수 있는지 확인하십시오. 더 빨리 실패 할 수 있습니다. – CurtainDog

답변

1

당신은 = 후 문자열이 문자에서 시작 있는지 확인 뒤에 모양을 사용할 수 있습니다

가 충돌하는 이유에 대해서는
(?<=\\=)([\\s\\w\\-.]*)$ 

, 그것은 두 번째입니다 그룹 주변의 *

  • 단일 문자, 아무것도하지만, 다음과 같은 그룹의
  • 다음에 0 개 이상의 반복과 같다 :
    • 하나를 당신이 당신 같은 소리 때문에 요구, 즉 필요한 이유를 잘 모르겠어요 흰색 그런 공간
    • 단어 문자의 양, 대시 또는 점 문자열의
  • 끝의 양

어쨌든, 그 *, 그리고 그것은 영원히 더 이상 회전하지 않습니다,하지만 난 여전히 뒤에 보이는를 사용하여보다 구체적인 정규식에 대한 줄.

또한 사용하는 방법을 모르지만 왜 $이 있습니까? 그런 다음 문자열의 마지막 문자열과 일치시킬 수 있습니다 (두 개 이상있는 경우). 그것은 당신이 새로운 라인을 예견 더 나을 것 같아 또는 말 : (?=\\n|$)

[편집] : 아래의 코멘트 당 업데이트.

+0

당신의 패턴이 문자열 사이에 "="의 RHS를주지 않습니다. "something.operer = asda adad" 단어 사이에 공백이 있으므로. 제 두 번째는 이러한 사례들을 돌보는 것이 었습니다.그리고 문자열 당 하나의 일치를 가질 것이므로 "$"를 사용할 수 있습니다. – kaychaks

+0

아, 오른쪽에 공백이 허용되면 다른'*'을 추가하는 대신 '\\ s'를 문자 클래스로 옮기십시오. 패턴이 그보다 더 엄격하면 반복 그룹 만 있으면됩니다. 내 대답도 업데이트되었습니다. – Nicole

+0

나는 벌써 그것을했다, 여기에서 갱신하려고하고 있었다. 어쨌든 도움을 주셔서 감사합니다. – kaychaks

0

이 시도 :

=\\s*(.*)$