2009-11-05 5 views
0

URL에 다음과 같은 패턴이 있습니다.
다음 패턴과 일치하는 정규식 준수?

  1. John.Smith
  2. John.Smith.1
  3. John.Al 스미스
  4. John.al-smith.1
  5. John.Smith.Al-Caboon

첫 번째 문자 (.)는 필수이며 첫 번째 문자 (.) 앞뒤에 하나 이상의 문자가있는 경우 나머지 문자 (숫자, 하이픈 및 두 번째 문자)는 선택 사항입니다.

  1. "로그인"(필수 첫째 점없이) :
    성공적으로 위의 모든 패턴을 일치하지만

    ^\w+.\w+-*\w*.?\d*\w*-*\w* 
    

    , 그것은 또한 같은 몇 가지 원치 않는 패턴을 일치 :
    나는 다음과 같은 정규식을 생성

  2. "users/john"(원하지 않는/ 이 있고 첫 번째 점이 필수 항목이 아님)
  3. "1234"(유효하지 않은 황갈색은 문자로 시작해야 함)

여기서 내가 뭘 잘못하고 있니?

+0

문자를 어떻게 정의 하시겠습니까? J1hn. 스미스가 유효할까요? –

+1

점을 백 슬래시로 이스케이프해야합니다. 지금은 와일드 카드로, 원하지 않는 문자열 중 일부가 패턴과 일치하는 이유를 설명합니다. – Franz

+0

@Dominic yeh, j1hn.smithy 및 1jhn.smith가 유효합니다. – Galilyou

답변

2

문제는 정규식

  1. 을 관찰 "." regex의 메타 문자입니다. 그것은 "무엇이든 (anything)"과 일치합니다. 점과 일치 시키려면 그것을 벗어나야합니다. 이와 같이 : \.
  2. \w은 작은 문자, 대문자, 숫자 및 밑줄이 포함 된 문자 클래스입니다. 이것은 "1234"가 통과 한 이유를 설명합니다.

^[a-zA-Z]\w*(\.[-\w]+){1,2}$ 
+0

작은 nitpick : 대부분의 정규식 구현은 DOT-ALL 옵션'(? s)'이 사용 가능하지 않으면 DOT가'\ r' 및'\ n'과 일치하도록하지 않습니다. –

+0

설명 주셔서 감사하지만 정규식이 위의 패턴과 일치하지 않습니다! – Galilyou

+0

@ 7alwagy 무슨 뜻인지 확실하지 않습니까? 나는 regexpal.com에 시도하고 완벽하게 일치했습니다. 파일에이 목록이 있고 검색과 일치하는 검색을 한 번 하시겠습니까? 그러면 ^, $ – Jaskirat

1

어쩌면 당신은

\. 
+0

+1 그것을 지적 해 주셔서 감사합니다! – Galilyou

0

그리고 \w[A-Za-z0-9_] 의미하는 점을 탈출해야한다. 이것이 "1234"와 일치하는 이유입니다.

0

사용이 표현하십시오 :

  • 적어도 하나의 문자
  • 필수 점
  • 이상 : 나는 당신의 정의로 읽을 \w+\S*?\.\w+\S*

    을 하나

문자이 성공적으로 .NET RegexOptions.ECMAScript와 * w \ RegexOptions.Multiline

관련 문제