regex는 정확히 n OR m 회

다음 정규 표현을 고려합니다.X모든 정규식입니다.

X{n} X{m} 

이 정규식은 다음을 테스트합니다.X정확하게 발생하고 있다 n또는m시대.

발생을 테스트할 수 있는 정규식 계량자가 있습니까?X정확하게n또는m몇 번이나요?



질문에 대한 답변



“정확히 m회 또는 n회”를 의미하는 단일 수량자는 없습니다.네가 하는 방식은 괜찮다.

다른 방법은 다음과 같습니다.

X{m}(X{k})? 

어디에m < n그리고.k의 가치입니다.n-m.




다음은 수량자 전체 목록입니다(참조 자료: http://www.regular-expressions.info/reference.html):

  • ?,??(0 또는 1 발생).??게을러서?욕심이 많다)
  • *,*?– 발생 횟수 제한 없음
  • +,+?– 1개 이상 발생
  • {n}– 정확합니다.n발생하다
  • {n,m}n로.m발생(포함)
  • {n,m}?n로.m발생, 게으름
  • {n,},{n,}?(적어도)n발생하다

“정확한 N 또는 M”을 얻으려면 m, n이 특별한 경우를 제외하고 정량화된 정규식을 두 번 써야 합니다.

  • X{n,m}한다면m = n+1
  • (?:X{n}){1,2}한다면m = 2n



아니요, 그런 수식자는 없습니다.하지만 나는 그것을 재구성하고 싶다./X{m}(X{m-n})?/역추적 문제를 방지합니다.




TLDR;(?<=[^x] ^)(x{n} x{m})(?:[^x] $)

“x n times” 또는 “x m times”를 원하는 것처럼 보이는데, regex에 대한 문자 그대로의 번역은(x{n} x{m}).다음과 같이 https://regex101.com/r/vH7yL5/1

또는 m “x”s 이상의 시퀀스를 가질 수 있는 경우(param m > n), “param no “x” 및 “param no “x”를 추가하여 다음과 같이 변환할 수 있습니다.[^x](x{n} x{m})[^x]‘x’의 앞뒤에는 항상 캐릭터가 있다고 가정합니다.여기 보시는 바와 같이 https://regex101.com/r/bB2vH2/1

로 변경할 수 있습니다.(?:[^x] ^)(x{n} x{m})(?:[^x] $)‘x’ 또는 ‘following line start’ 및 ‘x’ 또는 ‘following line end’로 변환됩니다.단, https://regex101.com/r/oC5oJ4/1에서 볼 수 있듯이 두 시퀀스 사이에 하나의 문자만 있는 두 시퀀스는 일치하지 않습니다(첫 번째 일치에는 다음 문자가 필요하고 두 번째 일치에는 이전 문자가 필요하기 때문입니다).

마지막으로, 한 글자 거리 일치와 일치시키려면 다음과 같이 “no ‘x’ after”에 긍정적인 시선(?=)을 추가하거나 “no ‘before’ before”에 긍정적인 시선(?<=)을 추가할 수 있습니다. https://regex101.com/r/mC4uX3/1

(?<=[^x] ^)(x{n} x{m})(?:[^x] $) 

이렇게 하면 원하는 ‘x’의 정확한 숫자만 일치시킬 수 있습니다.




아주 오래된 글이지만 도움이 될 만한 글을 쓰고 싶습니다.질문에 기재된 대로 시험해 보았습니다만, 효과가 있었습니다만, 단점이 있습니다.수량의 순서가 중요합니다.다음 사항을 고려하십시오.

#[a-f0-9]{6} #[a-f0-9]{3} 

이렇게 하면 발생하는 모든 16진수 색상 코드(3자리 또는 6자리 길이)를 찾을 수 있습니다.근데 이렇게 뒤집으면

#[a-f0-9]{3} #[a-f0-9]{6} 

3자리 숫자 또는 6자리 숫자 중 처음 3자리 숫자만 찾습니다.이것은 일리가 있고 Regex 프로는 이것을 즉시 발견할 수 있지만, 많은 사람들에게 이것은 특이한 행동일 수 있습니다.순서에 관계없이 이 트랩을 회피할 수 있는 고도의 Regex 기능이 몇 가지 있습니다만, 모든 사람이 Regex 패턴에 정통한 것은 아닙니다.