정규식과 하이픈을 일치시키는 방법은 무엇입니까?


81

[a-zA-Z0-9!$* \t\r\n]기존 문자와 함께 하이픈과 일치 하도록 패턴 을 다시 작성하는 방법은 무엇입니까?


공백을 추가하는 대신 \ t \ s를 추가 할 수 있습니다. \의 일치뿐만 아니라 공백의 다른 유형
라두 Simionescu

답변:


71

하이픈을 이스케이프하십시오.

[a-zA-Z0-9!$* \t\r\n\-]

업데이트 :
이 대답은 신경 쓰지 마십시오 . 그룹에 하이픈을 추가 할 있지만 이스케이프 할 필요는 없습니다. 대신 훨씬 더 잘 대답하고 그 이유를 설명하는 Konrad Rudolph의 대답을 참조하십시오 .


아? 캐릭터 그룹이기 때문인가요? 내 잘못이야.
Neil Barnwell

11
@KonradRudolph 맞습니다.하지만 이스케이프 처리되지 않은 버전이 이해하기 쉬운 지 잘 모르겠습니다. 대시의 두 가지 가능한 사용은 혼란 스럽기 때문에 시작해야 할 질문이 있습니다. 일단 알게되면 확실히 더 우아하지만 초보자에게는 약간 혼란 스럽습니다.
Christophe Roussy

183

하이픈은 일반적으로 정규식에서 일반 문자입니다. 문자 클래스에 있고 다른 두 문자 사이 에있는 경우에만 특별한 의미를 갖습니다.

그러므로:

  • [-] 하이픈과 일치합니다.
  • [abc-]경기 a, b, c또는 하이픈.
  • [-abc]경기 a, b, c또는 하이픈.
  • [ab-d]성냥 a, b, c또는 d( 여기서 밖에 하이픈 문자의 범위를 나타낸다).

1
@rrr 당신은 그가 당신을 위해 그것을 쓰고 철자를 써주기를 원합니까? 그룹에 하이픈을 추가하기 만하면됩니다.
Neil Barnwell

10
@rrrr : 대답을했다고 믿습니다. 질문은“ 'X'를 쓰는 방법…”이었고, 그 방법을 설명했다고 믿습니다. 내 대답을 취하고 실제 표현에 대한 설명을 적용하려면 1 학년보다 더 많은인지 능력이 필요하지 않아야합니다. 사실 이것이 바로 1 학년 학생들이 기본적인 산술을 배울 때 배우는 것입니다. 내 가정을 자유롭게 수정하십시오.
Konrad Rudolph


2
@MarkP 음, duh : 문자 16 진수 코드는 프런트 엔드 파서 (C #, JavaScript 또는 사용중인 언어)에 의해 실제 문자로 변환됩니다. 따라서 16 진수 코드를 사용하는 것은 문자열 값에 관한 한 실제 문자를 사용하는 것과 동일합니다.
Konrad Rudolph

1
@Pshemo 물론, 어리석은 실수. 의 해석과 관련하여 [a-c-e]: 이것은 일부 정규식 사양 / 엔진에서 유효하지 않습니다. 예를 들어 POSIX 정규식은 그것을 허용하지 않습니다.
Konrad Rudolph

12

항상 이스케이프 된 하이픈을 사용하는 것이 덜 혼란 스럽기 때문에 위치에 따라 달라지지 않아도됩니다. 그것은 \-대괄호 문자 클래스 내부입니다.

그러나 고려해야 할 다른 것이 있습니다. 열거 된 문자 중 일부는 다르게 작성되어야합니다. 어떤 상황에서는 반드시 그래야합니다.

이 정규식 버전 비교 는 C♯가 더 간단한 유니 코드 속성 중 일부를 사용할 수 있음을 나타냅니다. 유니 코드를 처리하는 경우, 당신은 아마 일반적인 범주를 사용해야 \p{L}가능한 모든 문자에 대한, 그리고 어쩌면 \p{Nd} 진수 숫자. 또한 HYPHEN-MINUS뿐만 아니라 대시 구두점을 모두 수용하려면 \p{Pd}속성을 사용해야합니다 . \s그다지 일반적이지 않다는 가정하에 공백 문자 시퀀스를 간단히으로 작성할 수도 있습니다.

모두 함께, [\p{L}\p{Nd}\p{Pd}!$*]해당 세트의 한 문자와 일치하는 패턴으로 작동합니다 .

전체 유니 코드 세트를 다룰 계획이 없더라도 어쨌든 그것을 사용할 것입니다. 왜냐하면 들어가는 것이 좋은 습관이기 때문이고 이러한 것들은 종종 원래 매개 변수를 넘어 서기 때문입니다. 이제 다른 코드에서 사용하기 위해 들어 올려도 올바르게 작동합니다. 모든 문자를 하드 코딩하면 그렇지 않습니다.


나는이 답변에 동의하는 경향이 있으며, 더 안전한 코드를 알 필요가 적습니다. 이것은 운영자 우선 순위 문제를 상기시켜줍니다. stackoverflow.com/questions/10007140/… , 괄호가있는 것이 좋습니다 (내 IDE에서 자동으로 추가됨). 모두 알 필요가 없습니다. 당신이나 다른 사람이 조만간 엉망이 될 수 있습니다. 물론 프로젝트에서 정규식을 많이 사용하는 경우 더 많은 고급 지식이 필요할 수 있습니다.
Christophe Roussy 2014

4

[-a-z0-9] +, [a-z0-9-] +, [az-0-9] + 및 [az-0-9] + 모두 동일합니다. 두 범위 사이의 하이픈은 a로 간주됩니다. symbol. 또한 [a-z0-9-+ ()] +이 정규식은 하이픈을 허용합니다.


최고의 답변 중 하나 여야합니다.
Razor 's Edge

3

이것이 당신이 추구하는 것입니까?

MatchCollection matches = Regex.Matches(mystring, "-");

1

모든 유형의 하이픈과 일치 시키려면 따옴표없이 "\ p {Pd}"를 사용하십시오. '-'문자는 Regex에서 특수 문자이기도 한 하이픈의 한 유형입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.