2017-10-03 7 views
0

에서 중지하고 내가 :-( 내가 모든 텍스트를 일치시킬 실행하는 정규식을 얻을 수에, 그 따옴표로 둘러싸인하지입니다.정규식이 아닌 따옴표로 둘러싸인 모든 차례 나오는 일치 늦었 여기 유럽에서의 문자

INPUT :.이 오, 그래, 입력, '따옴표'; 수; '매우 될'; 까다로운; '날 믿어', 소년

그것은 따옴표로 둘러싸인 모든 텍스트에 맞게 정말 쉽게

DEMO

하지만 내가 원하는 건 그 반대입니다. 또한 경기가에 의해 splitted되어야합니다; 그래서 나는 다음과 일치 얻을 :

  1. 오, 그래를이
  2. 입력
  3. 까다로운
  4. 소년

어떤 아이디어를 내가 화를하기 전에?

미리!

+0

가 쉬울 것를 사용할 수 있습니다 배열로'다음 확인 각 배열 요소가''' – Gurman

+0

으로 시작하고 끝나거나 둘러보기가 지원되는 경우 정규 표현식'(? <=^|;) [^ ';] + (? =; | $) LINK] (https://regex101.com/r/D9NAzo/2) – Gurman

+0

'((? <= (^ |;)) – JDong

답변

1

나는이 같은 트릭을 사용할 수 있다고 생각 :

'[^;]*'(?=;|$)|([^;]+)(?=;|$) 

설명 :

'[^;]*'(?=;|$)  => finding words between `'` and ended with `;` or end of text, but not group it 
|     => or 
([^;]+)(?=;|$)  => finding other words ended with `;` or end of text, but grouped 

지금 당신은 당신이 원하는 것을 잡으려고 $1를 사용할 수 있습니다.

[ Regex Demo ]

+0

'(? : '[^;] +'| ([^;] +) (?)로 단순화 할 수 있습니다. =; | $)' – ctwheels

+0

왜 단순화 된 것이라고 생각하십니까? 가독성 또는 ...? –

+0

코드 중복이 없습니다. '(? =; | $)'는 두 번 있으므로 한 곳에서 제거하면 정규 표현식의 유지 관리가 간단 해지고 3자를 덜 사용합니다. 이 솔루션이 추가 단계의 한계를 야기한다는 것을 알고 있지만 코드 유지 관리가 사용자에게 더 중요 할 수 있습니다. 사용자에게 * 옵션 *으로 제공되어야하므로 답변 상단에 단순화 된 패턴을 제안해도 별 도움이되지 않습니다. – ctwheels

관련 문제