[a-zA-Z0-9!$* \t\r\n]
기존 문자와 함께 하이픈과 일치 하도록 패턴 을 다시 작성하는 방법은 무엇입니까?
답변:
하이픈을 이스케이프하십시오.
[a-zA-Z0-9!$* \t\r\n\-]
업데이트 :
이 대답은 신경 쓰지 마십시오 . 그룹에 하이픈을 추가 할 수 있지만 이스케이프 할 필요는 없습니다. 대신 훨씬 더 잘 대답하고 그 이유를 설명하는 Konrad Rudolph의 대답을 참조하십시오 .
하이픈은 일반적으로 정규식에서 일반 문자입니다. 문자 클래스에 있고 다른 두 문자 사이 에있는 경우에만 특별한 의미를 갖습니다.
그러므로:
[-]
하이픈과 일치합니다.[abc-]
경기 a
, b
, c
또는 하이픈.[-abc]
경기 a
, b
, c
또는 하이픈.[ab-d]
성냥 a
, b
, c
또는 d
( 여기서 밖에 하이픈 문자의 범위를 나타낸다).[a-c-e]
: 이것은 일부 정규식 사양 / 엔진에서 유효하지 않습니다. 예를 들어 POSIX 정규식은 그것을 허용하지 않습니다.
항상 이스케이프 된 하이픈을 사용하는 것이 덜 혼란 스럽기 때문에 위치에 따라 달라지지 않아도됩니다. 그것은 \-
대괄호 문자 클래스 내부입니다.
그러나 고려해야 할 다른 것이 있습니다. 열거 된 문자 중 일부는 다르게 작성되어야합니다. 어떤 상황에서는 반드시 그래야합니다.
이 정규식 버전 비교 는 C♯가 더 간단한 유니 코드 속성 중 일부를 사용할 수 있음을 나타냅니다. 유니 코드를 처리하는 경우, 당신은 아마 일반적인 범주를 사용해야 \p{L}
가능한 모든 문자에 대한, 그리고 어쩌면 \p{Nd}
진수 숫자. 또한 HYPHEN-MINUS뿐만 아니라 대시 구두점을 모두 수용하려면 \p{Pd}
속성을 사용해야합니다 . \s
그다지 일반적이지 않다는 가정하에 공백 문자 시퀀스를 간단히으로 작성할 수도 있습니다.
모두 함께, [\p{L}\p{Nd}\p{Pd}!$*]
해당 세트의 한 문자와 일치하는 패턴으로 작동합니다 .
전체 유니 코드 세트를 다룰 계획이 없더라도 어쨌든 그것을 사용할 것입니다. 왜냐하면 들어가는 것이 좋은 습관이기 때문이고 이러한 것들은 종종 원래 매개 변수를 넘어 서기 때문입니다. 이제 다른 코드에서 사용하기 위해 들어 올려도 올바르게 작동합니다. 모든 문자를 하드 코딩하면 그렇지 않습니다.
[-a-z0-9] +, [a-z0-9-] +, [az-0-9] + 및 [az-0-9] + 모두 동일합니다. 두 범위 사이의 하이픈은 a로 간주됩니다. symbol. 또한 [a-z0-9-+ ()] +이 정규식은 하이픈을 허용합니다.
모든 유형의 하이픈과 일치 시키려면 따옴표없이 "\ p {Pd}"를 사용하십시오. '-'문자는 Regex에서 특수 문자이기도 한 하이픈의 한 유형입니다.