2013-05-08 2 views
0

(/, \, -, [,], <,>, $, ~,!, @, #, :, %) 이외의 특수 기호를 사용해서는 안되는 reg 표현식을 작성하고 싶습니다. 그래서 시도 :몇 가지 특수 문자를 사용하는 reg 식 작성 방법은 무엇입니까?

if { [regexp {^[\w/-\[\]<>$#[email protected]#%:\\\/]+$} $name] != 1 } { 
     puts "Handle error"; 
    } 

하지만이 작동하지 않습니다.

는 이름 IO1??에 대한 예를 들어

사람이 도울 수있는 오류로 취급 아니에요?

+1

블랙 슬래시 또는 앞 슬래시? –

+0

밑줄, 슬래시, 글자, 숫자의 초기 게시물 질문에 더 많은 문자를 추가 한 것처럼 보입니다. 이러한 새로운 "요구 사항"을 표현하는 방식은 실제로 허용되는 것을 혼란스럽게 만듭니다. 다른 것을 사용하지 마십시오 ... 이중 부정은 당신이 원하는 것을 정확히 파악하는 것을 어렵게 만듭니다. – Walls

+0

네, 결과가 변경되어서는 안된다는 것을 이해합니다. 그렇지? –

답변

4

당신은 당신의 캐릭터 클래스의 -을 탈출하거나 시작 부분에 넣어해야합니다 - 그렇지 않으면 범위로 해석 것 :

regexp {^[\w/\-\[\]<>$#[email protected]#%:\\\/]+$} $name 

또는

regexp {^[-\w/\[\]<>$#[email protected]#%:\\\/]+$} $name 

/\[ 사이의 범위가 보인다 ?을 포함합니다.

+0

감사합니다. 그것이 내가 찾고있는 것입니다. –

2

두 유형의 슬래시 /\이 필요하다고 가정합니다. 시도해 볼 수 있습니다 ^[\w\\\/]+$examples here 시도했습니다.

가까이에 있었지만 / 만 처리하는 것처럼 보였습니다. 당신은 그것을 도주하는데 정확했습니다 (\/ 필요). 추가 \\을 추가하면 \도 허용됩니다.

그래도 작동하지 않으면 합격/불합격을 사용중인 복잡한 문자열의 예를 제공하여 정규식을 개선하는 데 도움을 줄 수 있습니다.

참고 :이 답변은 번호, 문자, 밑줄 및 슬래시와 관련된 OP에 대한 것입니다.

+1

실제로 문자 클래스 안에는 이스케이프가 필요한 문자가 거의 없습니다. '/'는 분리 또는 분리를 위해 사용되지 않는 한, 외부 문자 클래스를 이스케이프 할 필요조차 없습니다. – melwil

+0

http://www.tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm#M30 – potrzebie

관련 문제