정규식을 사용하여 입력란에 입력 할 때 사용자가 적용한 형식을 결정하려고합니다.Java에서 이러한 정규 표현식이 왜 천천히 실행됩니까?
(\\s?[" + alphabet + "]{9,9})+
입력이 소정의 문자 길이 (9)의 하나 이상의 문자열, 공백으로 분리 가능 여부를 확인하기 위해 다음과 같이
정규식이다.
(>[\\w\\s]+\\n[" + alphabet + "\\s]+)+
는 입력이
FASTA format
에있는 경우 inputString.matches(regexString)
와 일치 할 때 정규 표현식은 대단히 느린 실행 확인하십시오. 왜 이런거야?
이것은 잠재적 인 모든 일치 항목 (이 시점에서 필자는 필요 없음)을 저장했기 때문에 발생할 수 있다고 생각했지만 모든 괄호에 ?:
을 추가하면 정규식이 손상됩니다. 어떻게해야합니까? 나는이 문제를 재현 할 수 없습니다 - 그것은 단지 하나의 컴퓨터에서 발생 :
마틴
편집 일을 주셔서 감사합니다. 이것은 특정 VM 설정에 잘못된 점을 제시 할 수 있습니다.
우리는 더 강력한 무엇인가가 필요합니다. 그래서 우리는 이것을 다르게 구현할 것입니다. 필자는 Joel의 답을 올바른 것으로 택했습니다. 왜냐하면 Pattern의 특별한 경우가 원인 일 수 있다고 생각하기 때문입니다.
각 입력 문자열과 일치시킬 패턴은 몇 개입니까? 패턴이 동적 또는 정적입니까? –
@Joel이 두 패턴 만 있습니다. 그들은 정적입니다. String.matches를 사용하면 매번 컴파일이되지만, 패턴과의 일치조차도 한 번에 매우 오래 걸립니다 (약 300 자 입력에 대해 10 초 초과) –
"매우 느립니다"를 정의 할 수 있습니까? –