2017-03-03 1 views
-1

정규식 초보자의 비트 ... 죄송합니다. IEEE 스타일 인용 또는 괄호 안에있는 숫자가있는 문서가 있습니다. [23] 에서처럼 하나의 숫자이거나 [5, 7, 14] 또는 [12-15] 에서처럼 여러 개일 수 있습니다.번호 매겨진 인용문을 캡처하는 정규식이 필요합니다.

내가 지금 가지고있는 것은 [\[|\s|-]([0-9]{1,3})[\]|,|-]입니다.

이것은 단일 숫자 및 그룹의 첫 번째 숫자를 캡처하지만 후속 숫자 또는 범위의 숫자는 캡처하지 않습니다. 그런 다음이 숫자를 \1과 같은 표현식으로 참조해야합니다.

나는 이것이 분명 희망! OR 연산자를 이해할 수 없다는 의혹이 있습니다.

+0

'|''[...]'내부는 리터럴 파이프 기호와 일치합니다. –

+0

내 정규식을 망쳤다 고 생각합니다 ... "[\ [| \ s | -] ([0-9] {1,3}) [\] |, | -]" –

+0

예, 당신의 패턴은 엉망입니다. 샘플 입력과 예상 출력을 사용하여 정규식을 사용하는 코드를 게시하십시오. [1,3-5]와 같은 –

답변

1

어때?

match [5,7,14]! 
match [23]! 
match [12-15]! 

이때 공백이 고려되지 않습니다하지만 당신은

해야하는 경우를 추가 할 수 있습니다 (\[\d+-\d+\]|\[\d+(,\d+)*\])

my @test = ( 
    "[5,7,14]", 
    "[23]", 
    "[12-15]" 
); 

foreach my $val (@test) { 
    if ($val =~ /(\[\d+-\d+\]|\[\d+(,\d+)*\])/) { 
     print "match $val!\n"; 
    } 
    else { 
     print "no match!\n"; 
    } 
} 

이 인쇄 :

(\[\d+\]|\[\d+-\d+\]|\[\d+(,\d+)*\])
는 사실이 더욱에 siplified 할 수있다

0

Jim의 답변이 도움이 될 것이라고 생각하지만 더 나은 일반화 및 코딩 이해 :

  • 질문 만약 찾던 더 복잡하지만 가능한 한 [1,3-5] 같은 :

    :

    (\[\d+(,\s?\d+|\d*-\d+)*\]) 
         ^^^^ optional space after ',' 
    //validates: 
    [3,33-24,7] 
    [3-34] 
    [1,3-5] 
    [1] 
    [1, 2] 
    

Demo for this Regex

자바 스크립트 코드 링크로 자리를 교체

//define input string: 
var mytext = "[3,33-24,7]\n[3-34]\n[1,3-5]\n[1]\n[1, 2]" ; 

//call replace of matching [..] that calls digit replacing it-self 
var newtext = mytext.replace(/(\[\d+(,\s?\d+|\d*-\d+)*\])/g , 
    function(ci){ //ci is matched citations `[..]` 
     console.log(ci); 
     //so replace each number in `[..]` with custom links 
     return ci.replace(/\d+/g, 
      function(digit){ 
       return '<a href="/'+digit+'">'+digit+'</a>' ; 
      }); 
    }); 
console.log(newtext); 

/*output: 
'[<a href="/3">3</a>,<a href="/33">33</a>-<a href="/24">24</a>,<a href="/7">7</a>] 
[<a href="/3">3</a>-<a href="/34">34</a>] 
[<a href="/1">1</a>,<a href="/3">3</a>-<a href="/5">5</a>] 
[<a href="/1">1</a>] 
[<a href="/1">1</a>, <a href="/2">2</a>]' 
*/ 
+0

모든 답변을 주셔서 감사합니다. Wiktor의 의견에 따라 이전에 제출 한 답변을 검색했지만 아직 발견하지 못했습니다 ... –

+0

각 1 ~ 3 자리 숫자를 개별적으로 추출하려고한다는 것은 분명하지 않다고 생각합니다. –

+0

정규 표현식으로'[1, 2]'를 발견하면 그것을 분해하고 링크를 파싱 해보십시오. 이 대체에 대한 예제 코드가 내 답변에 추가되었습니다. 나는 그것이 당신을 돕기를 바랍니다. @PeterBasch – MohaMad

관련 문제