2017-03-03 9 views
-1

正規表現初心者のビット...ごめんなさい。私は、IEEEスタイルの引用や括弧内の数字を持つ文書を持っています。 [23]のように1つの数字でも、[12-15]のように[5,7,14]や範囲のように複数の数字でもかまいません。番号付き引用をキャプチャするための正規表現が必要

今私が持っているものは[\[|\s|-]([0-9]{1,3})[\]|,|-]です。

これは、単一の数字とグループ内の最初の数字を取得しますが、後続の数字や範囲内の数字は取得しません。 次に、その番号を\1のような式で参照する必要があります。

これは明らかです。私はOR演算子を理解していない疑いがあります。

+0

'|' inside '[...]'は、リテラルパイプシンボルと一致します。 –

+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

私はジムの答えが役に立つと思うが、よりよい一般化とコーディング理解:

  • 質問[1,3-5]のような、より複雑なものの1つの可能性を探していた場合は、次の

    JavaScriptの桁リンクによってを交換するためのコード
    (\[\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

関連する問題