2012-10-18 6 views
1

나는이 문자열을 가지고 정규식을 반환하고 싶습니다. 그 패턴을 확인하십시오. > 연산자와 템플릿 <> 나는이 정규 표현식을 마련했다Regex 정확히 두 개의 콜론을 일치

-

NS::varible.child // OK 
variable.child // OK 
NS:variable.child // NO MATCH 
::variablename.child // OK 
:variablename.child // NO MATCH 
_variablename.child.x // OK 
5variablename.child.x // NO MATCH 

나는없이 C++ 변수 이름 일치합니다.

[a-z\_:{2,2}A-Z][a-z\_A-Z0-9\.:{2,2}]* 

:{2,2} 내가 원하는 것을 수행하지 않는 것 같습니다. 그것은 하나의 콜론도 허용합니다.

정확하게 두 콜론을 어떻게 검사합니까? 더 나은 C++ 변수 구조와 일치하는 정규식?

+0

'::'의 문제점은 무엇입니까? 왜 당신은 당신의 정규 표현식에서 그것을 사용하지 않는 것입니까? – ppeterka

+0

그것은 또한 싱글과 일치합니다 : – mikbal

+0

오, 제 멍청하고, 당신의 정규식을 잘못 읽었습니다. 잠시 후에 ... – ppeterka

답변

2

하나 ""Rubular에 온라인으로

/^((::)?[_a-zA-Z.]+)+$/ 

플레이.

+0

좋은 사이트 :) 내가 원하는 것을 받아들이 기 위해 필요한 개선을했습니다. ^ ((::)? [_ a-zA-Z] [_ a-z0-9A-Z.] +) + $ – mikbal

1

Like @Wiseguy는 문자 클래스 ([]) 내에서 특수 문자를 사용할 수 없다고 말했습니다.

([a-zA-Z]|::) 

편집 : 올바른 솔루션이 문자와 문자 클래스 사이에 교대로 그룹화를 사용하는 것보다 완전히 당신이 문자 클래스에 대해 생각은 쓰기의 단지 전문 방법 경우

설명 어쨌든 그룹 :

[a-g] 
,369 :

(a|b|c|d|e|f|g) 

은 동일

그래서 여분의 문자로 그룹을 사용하면 똑같은 효과를 얻을 수 있습니다.

+0

죄송합니다. 나는 그것을 얻는다, 그것은 내부에있다. [1] 1 초. 편집 할 것입니다. – Crisfole

1

^(\ + w | :) (: |.). + w \ \ +

W는 시도한다는주십시오. 당신이 사용할 수있는 "::"문자 그대로이 일치하도록 : 옵션

관련 문제