2016-08-28 1 views
6

이 정규 표현식 ^x{3}y{3}$을 사용하여 다음 문자열을 확인합니다. xxxyyy 여기서 x의 수는 y의 수 (예 : 3)와 같습니다. 하지만 문제는 반복 횟수를 모른다는 것입니다 (0에서 10까지). 따라서 3은 abstract로 대체되어야합니다.정규식과 그룹 일치 수를 재사용하는 방법은 무엇입니까?

나는 ^x*y*$ 또는 ^x{0,10}y{0,10}$, 사용할 수 있지만 x의 수의 's이 (가) y의 수와 다른'의 경우이 작동하지 않습니다.

일치하는 그룹을 재사용하는 데 사용되는 \1과 같은 것을 찾고 있는데, 제 경우에는 x에 대한 그룹 일치 수를 다시 사용하고 싶습니다. 당신이 고정 된 상한을 가지고 있기 때문에

+0

정규식에서 불가능합니다. 이를 위해서는 외부 언어의 도움이 필요합니다. 완전을 기하기 위해 사용중인 정규식 엔진을 말하십시오. (나는 이것이 회문 문제의 하위 집합이라고 생각하며 정규 표현식으로도 풀 수 없다.) http://stackoverflow.com/questions/233243/how-to-check-that-a-string-is- a-palindrome-using-regular-expressions) – Tomalak

+0

@Tomalak 그는 링크를 주었다 : https://regex101.com/r/rP7wB8/2 그래서 나는 그가 PCRE를 사용하고 있다고 생각하니? –

+0

@Nehal 잘 모르겠습니다. 그 링크는 결론을 이끌어 내기에 충분하지 않습니다. – Tomalak

답변

2

, 당신은 단지 긴 형식에서 일치하는 목록 수 :

^(x{10}y{10}|x{9}y{9}|x{8}y{8}|x{7}y{7}|x{6}y{6}|x{5}y{5}|x{4}y{4}|x{3}y{3}|x{2}y{2}|xy)?$ 

분명히 경우 (. ?는 경우 "각각의 제로"처리) xy은 실제로 길기 때문에 여기에 많은 반복이 있습니다.

또 다른 방법은 xy을 빈 문자열로 반복적으로 바꾸고 빈 문자열로 끝나는 지 확인하십시오 (한 쌍을 제거 할 때마다 다른 쌍을 가져 오기 때문에).

+0

고맙습니다 만, 예를 들면 10 개가 실제 상한선을 확인해야하지만 100을 초과합니다. – Termininja

+1

@Termininja이 표현식을 자동으로 생성 할 수 있으므로 반복 횟수는 중요하지 않습니다. – Tomalak

+0

실용적인 접근, 아주 좋아. – Tomalak