2016-11-14 29 views
0

다음 EBNF를 유효한 형식 문자열과 일치하는 정규 표현식으로 변환해야합니다. 정규식 엔진 그룹 (FE PCRE)를 캡처라는 지원하는 경우, 예를 들어 '< 8' '*^10', '+ 6', '15 0.2'등EBNF를 정규 표현식으로 변환

<spec> -> :[[<fill>]<align>][<sign>][<width>][,][.<prec>] 
<fill> -> <character> (* i.e., any one character) 
<align> -> < | > | = |^
<sign> -> + | - | ' ' 
<width> -> <integer> (* i.e, one or more digits 0....9 *) 
<prec> -> <integer> 
+0

당신이 뭘하려 우리를보기 – nozzleman

답변

0

다음이 작동 할 수 대부분은 "폭"캡처 그룹을 제외하고, 선택 사항입니다

^((?<fill>.?)(?<align>[<>=^]))?(?<sign>[ +\-]?)(?<width>[0-9]+)[,]?(?:[.](?<prec>[0-9]+))?$ 

테스트 here

참고. 이것은 모든 예제에서 "너비"가 존재한다는 가정을 기반으로합니다. 이름 캡처 그룹을 사용

, 정규식은 짧아집니다 :

^((.?)([<>=^]))?([ +\-]?)([0-9]+)[,]?(?:[.]([0-9]+))?$