2009-03-30 19 views
0

私はここに私の質問に答えました:How do I know if a file is tab or space delimited in Perl?正規表現で+と*は何を意味しますか?

を誰かが正規表現を打破し、上に行くと、なぜそれが文句を言わないファイルの最後の行に動作しているかを説明することができれば、それは本当に私を助けるだろう。

~/^(\d+\s+)+?$/ 

私は...私は追加する場合、「*」*ゼロ個以上を意味するので、それが動作するようthebackに「+」を持っていた上記思ったが、それが実際に

+0

元の質問を更新すると、より良い回答を得ることができます。私は、元の質問の回答者のうちのいくつかに39分前に正規表現を説明するように頼んだことを知っています...彼らに応答する時間を与えてください! :-) –

+0

'?'その正規表現の終わりには目的がありません。とにかく入力の終わりまで完全に一致しなければならない場合、量的な表現を非貪欲にすることには意味がありません。 –

答えて

2
Regex: /^(\d+\s+)+?$/ 
Parts: 1 2 3 456 
  1. マッチ一つ以上の数字を探す
  2. 空行を受け入れること

  3. 続き1つ以上の空白(またはタブ)によって
  4. の一つ以上を探すしかし、あなたは、行く保管しないことができたときに停止する、つまり(その試合で貪欲ことはありませんあなたがそうすることができなくなるまで)
  5. 行の終わりにマッチします。

スペースまたはタブで区切られた数字の行全体の文字列と一致する必要があります。最後の行でなぜ失敗するのか正確にはわかりません。おそらく最後にスペース文字はありませんか?それぞれの数字の後に少なくとも1つのスペースが続く必要があるので、それはそれかもしれません。

0

元の正規表現を動作しませんでした空行を受け付けないので、おそらくファイルの最後の行では機能しません(サンプルファイルへのリンクがうまくいくでしょう)。

perl -ne 'if ($_=~/^(\d+\s+)*$/){print "yep\n";}' 

もう1つの方法は、すべての文字が空白か数字かをチェックすることです。

perl -ne 'if ($_=~/^[\s\d]*$/){print "yep\n";}' 

空行を受け付けない:ライン

  • の開始から

    perl -ne 'if ($_=~/^[\s\d]+$/){print "yep\n";}' 
    
  • 関連する問題