2014-01-15 4 views
2

xsd 파일에서 regex를 사용하여 xml 파일과 다른 여러 가지를 일치 시키려고합니다.일치하는 */* 정규식

일치하는 0 또는 */* 및 0-9/0-9와 일치하려고합니다. 0-9는 숫자 0 - 9이며 0/4는 일치해야하지만 0/a는 일치하지 않아야합니다./부적합한 입력.

가능한 항목 목록. 비

0 
0/0 
1/4 
22/22 
*/* 

예 허용 항목

1 (no digits other than 0) 
1/a 
a 

여기 내가 사용 정규식이지만 결함을 갖는다. 그것은 0 벌금과 일치하지만 여전히 0/a를 받아들이며 */*와 전혀 일치하지 않습니다.

^.*\b(0|[0-9]\s\/\s[0-9]|\*\s\/\s\*)\b.*$ 

답변

1

글쎄, 무슨 0/a을 허용하는 것은 처음 .* 아무것도 일치하지 위치를, 사용하는 00 일치합니다 마지막 .*/ a 일치합니다 그 .*입니다. 그리고 나는 당신이 정말로 여기에 단어 경계를 필요로하지 않는다고 생각합니다. 단지 0 일치하여

시작 :

^0$ 

그런 다음 0-9/0-9에 동의 분기 :

^(?:0|[0-9]/[0-9])$ 

그리고 당신은 여러 자리를 수락는 수량에 추가합니다. 단지 '또는'서로를 추가, 0/0를 수락하려면

^(?:0|[1-9][0-9]*/[1-9][0-9]*)$ 

을 : 당신이 09/09 같은 물건을 얻을하지 않는 경우, 대신 [1-9][0-9]*를 사용

^(?:0|(?:0|[1-9][0-9]*)/(?:0|[1-9][0-9]*))$ 

을 마지막으로 *에 동의 , 당신은 문자 클래스에 0과 함께 넣을 수 있습니다 :

^(?:0|(?:[0*]|[1-9][0-9]*)/(?:[0*]|[1-9][0-9]*))$ 

regex101 demo

+0

. 방금 정규식을 배우기 시작했습니다. 좋은 설명을 주셔서 감사합니다. – deathismyfriend

+0

@deathismyfriend 환영합니다 :) – Jerry

+0

XSD 정규 표현식은 항상 전체 값과 일치하므로 (또는 전혀 일치하지 않음) XSD 정규 표현식의 앵커에는^및 $가 사용되지 않으며 열심히 또는 탐욕스러운 일치. 솔루션의 XSD 공식은'(0) | (([0 *] | [1-9] [0-9] *)/([0 *] | [1-9] [0-9 ] *))'. 주어진 표현식이 실제로 OP를 위해 작동한다면, OP는 XSD 스키마가 포함되었다고 생각하는 것이 잘못되었을 수 있습니다. –

1

이 작동 :

([\d*]+\s\/\s[\d*]+|0) 

예 : 링크에 대한 완벽하고 감사했다 http://regex101.com/r/fI0cS5

+0

일치하지만 일치하는 많은 0을 허용합니다. 위 Jerry에 의하여 아닙니다. 시도해 줘서 고마워. – deathismyfriend