도움

2010-06-09 2 views
3

내가하는 정규 표현식을해야 할 필요 하반기 문자)도움

그래서 다음 중 내가 /[a-zA-Z0-9]([-])?[a-zA-Z0-9]{5,10}$/; 작동합니다이 표현을 생각하지만

11111A 
111111-1 
111111-yy 
yyyyy-989 
yyyyyy-9090 

유효 올바르게 작동 얻을 메신저 없습니다. \w[a-zA-Z0-9_]위한 편리한 바로 가기이지만 수 있습니다 :

^\w{6}-?\w{0,4}$ 

: 어떤 도움을 이해할 수있을 것이다

,

+4

당신은 "상반기에 정확히 6 자"라고 말했지만 나중에는 "yyyyy-989"가 유효하다고 말했습니다. 나는 뭔가를 놓치고 있는가? 아니면이 모순 적인가? – Ken

+2

정규 표현식에 대해 질문 할 때 대상 언어/시스템을 나타내는 것이 좋습니다. Perl의 RE 엔진은 JavaScript 1과 다르며 Java 1과는 다릅니다. 편집기 (또는 grep과 같은 도구)의 지원도 크게 다를 수 있습니다. Charles Stewart가 PCRE 태그를 추가했지만 원하는/필요로하는 것이 확실하지 않습니다. – PhiLho

답변

5
^[a-zA-Z0-9]{6}(-[A-Za-z0-9]{1,4})?$
+0

당신이'{1,4}'를 의미한다고 생각합니다 –

+0

@Ahmad : 감사합니다, 당신 말이 맞습니다 – tanascius

+0

@tanascius : np, +1 : –

0

경우 첫 6와 마지막 4 숫자 만입니다 밑줄 (_). 그것들을 원하지 않으면 [a-zA-Z0-9]으로 바꾸십시오. 피 제로의

UPDATE

두 가지 방법 : 당신이 (예를 들어) 마지막 그림은 0
^\w{5}[a-zA-Z1-9]-?\w{0,3}[a-zA-Z1-9]$

  • Negative look-ahead되어야 함을 알고있는 경우

    1. , 당신의 그룹을 Spliting, 매우 강력하지만 모든 정규 표현식 "구현"에서 사용할 수 없습니다 (구현) :
      ^(?!0{6})\w{6}-?(?!0+$)\w{0,4}$
      "너비가 0 인"어설 션은 문자를 소비하지 않고 패턴이 발생할 경우 앞에있는 것을 확인하고 일치가 실패하는 경우에만 사용합니다 (네가티브의 앞을 봐야합니다). 첫 번째 것은 충분히 쉽습니다. 정확히 6 개의 0이 있는지 확인하십시오. 두 번째 행/문자열의 끝 ($) 직전에 하나 이상 (+) 0이 있는지 확인합니다.
  • +0

    숫자 만 가능하거나 영문 숫자 일 수도 있습니다 – user268375

    +0

    영숫자는 문자 또는 숫자를 의미합니다. '\ w'는'[a-zA-Z0-9_]'와 동일합니다 –

    +0

    상반부 및/또는 하반기가 모두 0 일 수 없다는 조건을 추가하고 싶습니다. 모든 도움을 주셔서 감사합니다 – user268375

    1
    ^[a-zA-Z0-9]{6}-?[a-zA-Z0-9]{0,4}$ 
    

    이 다른 사람의 일부 간결 아니지만, 방탄이다. Tanaskius와 Streetpc의 솔루션은 \w이 밑줄과 일치하므로 ______-____과 일치합니다.

    하나의 질문 : 대시가 선택 사항이며 다음 4 개의 문자는 선택 사항이므로 111111AAAA과 일치해야합니까? 그렇다면, 위의 정규 표현식은 당신을위한 것입니다. 왜냐하면 Tanascius는 이것을 맞출 수 없기 때문입니다. 그렇지 않은 경우

    , 당신이 원하는 것 : 조금 더 효율적인 backreferenceless 그룹화를 사용합니다

    ^[a-zA-Z0-9]{6}(?:-[a-zA-Z0-9]{1,4})?$ 
    

    합니다.

    마지막으로 한 가지. 이 솔루션은 111111-과 일치하지 않지만 11111-A과 일치합니다.이와 함께 이동 111111A 일치하지 당신이 111111-에 맞게 좋아하지만 할 경우도 는 않습니다

    ^[a-zA-Z0-9]{6}(?:-[a-zA-Z0-9]{0,4})?$ 
    

    편집 : Tanascius '솔루션은 더 이상 \w를 사용하지 않기 때문에 관련된 위 말했다 무슨 무시 이.

    +0

    예, 저는 배우고 있습니다 : * 선택 사항 대시 *에 +1, 실제로 정확하게 지정되지 않았습니다. – tanascius

    0

    주제가 될 수는 없지만 정규 표현식 전문가가 아니기 때문에 텍스트 메뉴를 작성하는 데 도움이되는 txt2regex 프로그램을 자주 사용합니다. http://txt2regex.sourceforge.net.

    "프로그래머가 문제가있어 정규 표현식을 사용하여 해결할 수 있다는 것을 깨달았지만 지금은 두 가지 문제가 있습니다."