2017-01-04 1 views
4

두 개의 모음이 들어있는 단어를 연속으로 검색하려고합니다.하지만 일치하는 단어가 없거나 충분하지 않습니다. 이것이 마지막 반복입니다 (다트).정규식 비 연속 매칭

final vowelRegex = new RegExp(r'[aeiouy]{2}'); 

다음은 구문 분석중인 문장의 예입니다. 하나, 어깨, 개미 이상 일치해야합니다. 그것은 단지 어깨와 일치하는 것입니다. 나는 그것이 내가 정의한 표현이기 때문에 이유를 이해합니다. 단어의 위치에 상관없이 두 모음에 일치시키기 위해 표현식을 어떻게 정의 할 수 있습니까?

one shoulder their the which over 

표현은이 일을 단순화 그렇게 잘하면 한 번에 하나 개의 단어를 테스트 할 필요가있다.

+0

무슨 일이 [aeiouy] {0} –

답변

2

모두를 올바르지 않습니다.

(\S*[aeiouy]\S*){2}은 비 단어 문자 (proof)를 포함 할 경우에도 공백이 아닌 문자 의 문자열을 일치시킬 수 있습니다.

\S*[aeiouy]\S*[aeiouy]\S*에 동일한 문제 (proof)가 있습니다.


올바른 해결책 :

\b([^\Waeiou]*[aeiou]){2}\w*\b 

그리고 당신은 (오히려 비 단어 문자 제외) 단어 경계로 계산에만 공백을 원하는 경우, 다음 정규식을 사용하는 경우 대상 단어 캡쳐 그룹 \2에 있습니다.

(\s|^)(([^\Waeiou]*[aeiou]){2}\w*)(\s|$) 
+0

감히 downvote를 설명하기 위해? – Travis

+0

AFAIK 마지막 예제가 브라우저에서 작동하지 않습니다. (하향식이 아니 었습니다.) –

+0

@ GünterZöchbauer [여기] (https://regex101.com/r/SqjN8T/8) – Travis

2

이 작업을 시도 할 수 있습니다 :

\S*[aeiouy]\S*[aeiouy]\S* 

Explanation

  1. \S*
  2. * 한정 기호 ([^\r\n\t\f ]와 같은) 비 공백 문자와 일치 - 제로 사이의 일치 제한 시간을
  3. [aeiou] 아래 목록에있는 하나의 문자와 일치입력 문자열에 대한

: 당신이 사용할 수있는 one shoulder their over

+0

문제는이 개 모음으로 단어에 대해이었다 . –

+0

그게 맞습니까? –

+1

'어깨 '에는 3 개의 모음이 있습니다. –

3

: one shoulder their the which over

는 네 개의 단어를 일치 앞의 두 답변의

new RegExp(r'(\w*[aeiouy]\w*){2}'); 
2

내가 할 줄 :

\b(?:\w*[aeiouy]+\w*){2,}\b 

설명 : 당신이 사용하는 경우

\b   : word boundary 
    (?:   : start non-capture group 
    \w*  : 0 or more word characters 
    [aeiouy]+ : 1 or more vowels 
    \w*  : 0 or more word characters 
){2,}  : end group repeated at least twice 
\b   : word boundary