2016-08-09 5 views
0

정규식을 세미콜론으로 구분 된 버전 열거와 일치 시키길 원합니다. 또한 버전을 언급하지 않을 수도 있습니다. 입력정규식이 더 좋습니까?

예 :

12.1.01;;;1.3.400;12-3;5;;;;;;4,5 
12.5 
;;;13,7;;15-12.300 

적어도 하나의 버전은 세미콜론 사이 언급한다. 버전 수는 any 일 수 있습니다.

regex="^\;*([0-9]+([\.\,\-]{1}[0-9]+)*)+(\;|([0-9]+([\.\,\-]{1}[0-9]+)*))*$" 

다른 솔루션 :

현재이 정규식 내가 원하는 것을 할 것 같다?

+0

'또한 semicolons.' 사이에 언급되어야 version.'와'적어도 하나의 버전이 모순 된 것 같다 언급되지 않을 수 있습니다 ... – Skogsv

+0

죄송합니다. 실제로 이것은 혼란 스러울 수 있습니다. 최소한 세미콜론 사이에는 최소한 하나의 버전을 언급해야합니다. ;;;;;;;;;;;;;;;;; -> 이것은 유효하지 않으며 버전이 없어서 일치하지 않아야합니다. 12.3; 9-123.25; 34,5; 123.3.4 – softwareRat

답변

2

당신이 세미콜론 제품 내부를 찾고 있다면, 정규식 트릭을 할해야

([^;]+) 

. 그것은 ;

되지 않은 기호 가능한 한 긴 시퀀스를 일치 정규식 :

([^;\n\r]+) 

그들 사이에 세미콜론없이 다른 행에있는 또한 별도의 버전 이름 것이다. 그냥 고전적인 프로그래밍 언어의 수동 분할과 같은

IFS=';' 
for x in string 
do 
    version = $x 
done 

: 버전을 통해이 같은 것을 반복하는

+2

마이너 수정 :'([^; \ n \ r] +)'이어야합니다. 다음과 같이 모든 세미콜론 사이에 버전이 필요하지 않습니다. 'regex'도''''와 같은'빈 문자열 '을 받아들입니다. – jbsu32

+0

절대적으로 정확합니다. 저의 실수입니다! 지금 편집되었습니다. – Skogsv

-1

가 나는를 사용합니다. 그것은이 패턴은 모든 것을하지 일치

/^(;*((\d+)\.)*?(\d+);*)*$/ 

유효한 경우

+0

입력 내용의 유효성을 검사 한 후 수행 할 작업입니다. 나는 루프를 시작하기 전에 그것을 검증하여 각 버전에 대한 로직을 추가 할 것을 선호한다. 아무튼, 나는 이것을 고려할 것이다. 감사. – softwareRat

0

이 패턴은 라인과 일치;

/[^;]+/g 

이 패턴은 버전과 일치 :

/(\d+\.)*\d+/ 
+0

사소한 : 당신은 마지막 정규식에서'.'를 피하기 위해 놓친 것 같습니다. 현재 예를 들어 '123; 456'. – Skogsv

+0

@Skogsv ty - 수정 됨 – Error404

관련 문제