2012-11-23 3 views
-1

텍스트 영역 양식의 입력을 검사하고 양식에 999 개가 넘는 단어가 있는지 여부를 감지하는 정규식이 필요합니다. 이것은 언어에 독립적입니다. 즉, 유효성 검사를 위해 정규식을 허용하는 양식 플러그인을 사용하고 있습니다.999 개 이상의 단어를 검사하는 정규식

+6

단어의 정의는 무엇입니까? –

+1

플러그인이 특정 라이브러리/언어에서 정규식을 실행하지 않습니까?이것이 언어에 독립적 일 수있는 방법을 모르겠습니다. –

+1

현재 정규식을 확인하고 해결하도록 도와 드리겠습니다. 아니면 아직 아무것도 시도하지 않았습니까? –

답변

1

입력 문자열에 대해 간단한 정규식 일치를 테스트하기 만하면됩니다. 이 앵글 중심의 해결책이

^(?=(.*\b\w+\b){1000,}) 

참고 : 당신이 앞서 모양을 사용하여 유니 코드 지원, 사용 패턴

(?:\b[\w\p{L}]+(?:[^\w\p{L}]+|$)){1000} 
0

은 @Asad은 다음 단어를 한 번 이상 (\w+)의 일부가 될 수있는 문자 다음에 답이 단어 경계 (\b)과 일치

(\b\w+\b\s+){1000,} 

퍼팅 부끄러워하는 것 때문에 단어 경계 및 하나 이상의 공백 문자 (\b\s+ - 공백은 탭 등이 될 수도 있습니다.) 최소 1000 회 ((...){1000,})

+0

정답이 아닐 가능성이 높습니다. 귀하의 * 단어 *는 "카페"와 일치하지 않으며 중간에 한 문장 부호가있는 999 개 이상의 단어로 구성된 입력을 고려하지 않습니다. 입력이'\ s'로 끝나지 않으면 제안 된 정규 표현식 또한 일치하지 않습니다. –

+0

실제로 @Asad - 여기에 유용한 포스트가 있습니다. http://stackoverflow.com/questions/7292395/how-to-match-accented-characters-with-a-regex - 질문에는 찾고있는 것의 전체 범위가 포함되어 있지 않습니다 ... –

+0

@BartKiers '\ w'문자가 포함 된 문자 클래스에 해당 문자를 추가하고 '+'를'* '로 바꾸는 것일 수도 있습니다. –

0

를 추가해야 할 경우 정규식 패턴

(?:\b\w+(?:\W+|$)){1000} 

를 사용합니다. 다른 언어의 경우 \w은 "구두점 또는 공백이 아닌"정규식 또는 이와 유사한 것으로 바꿔야합니다. 또한 이것은 말로 아포스트로피를 제공하지 않습니다.

+0

이 경우 스트레이트 매치가 할 수없는 것에 대해 미리보기는 무엇을합니까? 어쨌든'. *'을'\ W *'로 변경해야합니다. RegexBuddy를 사용하여 1,000 단어 문자열 (일치해야 함)에서 정규식을 테스트하고 백만 단계 후에 구제했습니다. '.'을'\ W'로 변경 한 후 5,007 걸음으로 성공한 것으로 나타났습니다. –

0

다음은 비 공백의 블록 수를 계산하는 표현식입니다. 실제로 3 개 단어가있을 때, 다음과 같은 문자열 "대사 T'Pel"2 개 단어를 계산하기 때문에

^(?>\s*\S+){1000,}\s*$ 

이 완벽한 해결책이 아니다. 그러나 그것은 정규 표현식을 매우 간단하게 유지시켜 주며, 여러분의 요구에 충분히 잘 맞을 수도 있습니다.

이 정규식은 백 트랙킹을 최소한으로 유지하므로 매우 빠릅니다.

+0

'word1, word2, word3, word4, word5'는 해답을위한 하나의 단어입니다. –

+0

@ Ωmega - 내가 말했듯이 완벽하지는 않습니다. 그러나 당신의 문자열은 표준 영어 텍스트에서 이상합니다. 대부분의 쉼표 뒤에 공백이 있습니다. –

1

나는 모든 사람이 필요 이상으로 어렵다고 생각합니다. "단어"가 언어 적 의미의 단어인지 정말로 신경 써야합니까? 아니면 이럴 수 있을까요? 당신의 정규식 맛이 소유 한정사를 지원

\S+(?:\s+\S+){999} 

그렇다면, 그리고 만약, 내가 추천 실제 정규식은 다음과 같습니다 일치 수없는 경우

\S++(?:\s++\S++){999} 

훨씬 더 빨리 실패합니다. 예를 들어 RegexBuddy에서 정확하게 999 개의 단어와 문자열을 일치 시키려고 할 때, 첫 번째 정규 표현식은 21,870 개의 단계를 거치고 소유 버전은 3,996 개의 단계 만 사용합니다. 당신이 소유 한정사가없는하지만 당신은 원자 그룹이있는 경우,이 실패하는 4008 단계를 수행합니다

\S+(?>\s+\S+){999} 

성능은 사용자 입력의 유효성을 검사하는 정규식을 사용하고 있는지 주어, 아마 무관하다. 나는이 상황에서 당신의 기계를 잠그는 정규식을 만드는 것이 매우 쉬울 것이기 때문에 그것을 가져왔다. 그리고 그것은 일반적으로 일치하는 것이없는 경우에 발생합니다. regexes를 테스트 할 때 적어도 일치하는 테스트와 일치하지 않는 테스트가 있어야합니다.

관련 문제