2009-09-11 5 views
211

정의 된 특정 문자 또는 문자 집합을 제외한 모든 문자와 일치하는 정규식을 정의 할 수 있습니까?쉼표 ','또는 세미콜론 ';'을 제외한 모든 문자와 일치하는 정규식은 무엇입니까?

기본적으로 쉼표 (,) 또는 세미콜론 (;)으로 문자열을 분할하고 싶습니다. 그래서 나는 쉼표 또는 세미콜론을 만날 때까지 모든 것을 일치시키는 정규식으로 그것을하려고 생각했다.

답변

291
[^,;]+   

사용중인 정규 표현식 구현을 지정하지 않았습니다. 그들 중 대부분은 구분자를 사용하고 그것들에 의해 분할하는 Split 메쏘드를 가지고 있습니다.

[,;]+ 
+6

그리고 질문은, 인접한 분리 허용 여부를 지정하지 않습니다 그래서 뒤에 '+'약간 모호한입니다. –

+0

세미콜론 만 오류가 발생하는 경우 - 끝나지 않은 regexp가 파일 끝을 충족합니다 – Jaswinder

54

사용 문자 클래스 : 당신은 (^없이) "정상"문자 클래스 하나를 사용할 수도 있습니다. 캐럿으로 시작하는 문자 클래스는 클래스에없는 문자와 일치합니다.

[^,;] 
+1

[부정 문자 클래스]에 대한 추가 정보 (http://www.regular-expressions.info/charclass.html) – HEX

2

사용이 :

([^,;]*[,;])* 
+4

쉼표 또는 세미콜론이 필요합니다. 필드 구분 기호가 아닌 필드 구분 기호. 차이점은 '라인'(또는 다른 스캔 된 레코드 구조)의 끝에서 중요합니다. 일반적으로 마지막 필드 다음에 쉼표 나 세미콜론을 사용하고 싶지 않습니다. 정규 표현식 엔진이 충분히 강력하다면''(? : ([^ ,;] *) (? : [^ ,; | $))''(비 포획 괄호를 사용하는 PCRE)를 사용할 수 있습니다. 필드 나 레코드 끝에 쉼표 나 세미콜론을 사용하면 상황이 개선됩니다. 빈 필드가 허용되는지 여부도 고려하십시오. –

+1

마지막으로 캡쳐에 의해 실제로 리턴되는 것에 대해 걱정해야합니다. 분리 기호가 실제로 포함 되었으면 좋겠습니까? 한 줄에 10 개의 필드가있는 경우 캡쳐 표기법에 의해 반환되는 필드 수는 몇 개입니까? –

+1

당신은 그 모든 것에 대해 옳았습니다. 그러나 제가 대답 한 내용에 콘서트를하지 않은 이유는 질문자가 묻는 RegEx의 어떤 언어/라이브러리인지 모르겠다는 것입니다. 그는 "GREP"를 사용 중일 수 있습니다. 어쨌든, 그 의견을 덧붙여 주셔서 감사합니다. :디 – NawaMan

관련 문제