• ベストアンサー

linuxなどの正規表現において[1-9]のとりあつかいについて

linuxなどの正規表現において これまでa[1-9]とすると、1から9までの数字という意味になるかと思っていましたが、そうではないということがわかりました。(ですよね?) 調べてみると、任意の1字となっております。 a[11-20]のケースで考えると、 ・・・・ [○-○]の意味が、まったくわからなくなってしまいました。 どこかわかりやすい説明をしているサイトor教えていただけるかた なにとぞ、ご教示くださいますようお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

[]の中は数値としての意味は無く、ただの文字です。 [123]は "123" という数ではなく、"1"または"2"または"3"のいずれか、という意味です。 数字以外でも [ade456]"a"または"d"または"e"または"4"または"5"または"6"のいずれか などの文字も書けます。 []の中の-は連続した文字を指定するときの、簡略化した記法です。 a[1-9]はa[123456789]と同じです。 たまたま、整数1から9までと同じなだけです。 [a-z]のように、文字も書けます。 以上を踏まえて、[11-20]を展開すれば [1120] (1~2なので1と2が該当) [120] (重複をまとめる) となり "1"または"2"または"0"のいずれか となります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

コンピュータ内部では、文字コードで処理されます。 "1"の文字コードは、一般的なPCでは0x31、"9"の文字コードは0x39です。 正規表現の[1-9]は、文字コードの0x31から0x39のいずれか一つの文字とマッチするということです。そして、通常、どの文字コード体系でも"1"から"9"の文字は連続して文字コードが付与されていますから、[1-9]で"123456789"のいずれか一つの文字とマッチするのです。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

正規表現は文字列を判断するものだということから理解すれば自明です。 おそらくなさりたいことは a(?:1[1-9]|20) 的な処理が必要です。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4854/10269)
回答No.3

[ ] は、その中のどれかの文字一文字にマッチします。 例えば [abx] だと、a または b または x にマッチします。 英小文字のどれかに一致だと、[abcdefghijklmnopqrstuvwxyz] と書くわけですが、これは面倒なので、略記方として、[a-z] と書くことが出来ます。[a-e] だと、[abcde]と同じ。これが [ ] の中の - の意味です。 [1-2] は [12] と同じです。つまり 1 または 2。 [11-20]は、[1120] と同じなので 1 または 2 または 0 となります。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

>linuxなどの正規表現において 環境がまったくわかりません。 linux とは言うまでもなく OS のことで、正規表現とは無関係です。 >調べてみると、任意の1字となっております。 どのように「調べ」たのか補足にどうぞ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Linuxの正規表現について

    Linuxの正規表現について教えてください。 正規表現を使うと、文字列のパターンを表す事ができる。例えば、行頭が「#」で始まる行は____、aもしくはfで始まる三文字の文字列は____となる という問題なんですけど____の部分をだれか教えてください。明日テストなんだけどわからくて… お願いします。

  • 正規表現について

    HTMLファイルを読み込み、特定の文字列にリンクを付けて出力したいのですが上手くいきません。 例: <img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に正規表現を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。  ↓正規表現をキーワードにしてリンクを付けたい。 正:<img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 誤:<img src="./seiki_hyougen.gif" alt="<a href="seiki_hyougen.html">正規表現</a>についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html"><a href="seiki_hyougen.html">正規表現</a>の詳しい説明</a>をクリックして下さい。 尚、下記URLのサンプルを参考にしてスクリプトを作成しています。 http://php.oss.eznetsols.org/manual/ja/function.preg-split.php $r = preg_split('((\/a>)|(<a))', $html, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($r); $i++) { if ($r[$i] == "<a") { $i++; continue; } $r[$i] = preg_replace( "/(正規表現)/i", "<a href='seiki_hyougen.html'>\\1</a>", $r[$i] ); } return join("", $r); この(正規表現)の部分で上手い正規表現を使えばalt="×××"の中にリンクタグが入らないようにできるのでは?と思っているのですが・・・。 どうか、良い方法を教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現について

    正規表現について、 ○○○「\d」{20}○○○ は、数字を20回繰り返す意味で良いですよね? と言うことは、数字を15回繰り返すものや、30回繰り返すものはダメで、 繰り返す回数がちょうど20回でないと一致しないということですよね?  もちろん数字じゃないとダメですよね? 合っているでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • 正規表現について

    正規表現について 正規表現について昨日から取り組み始めたのですが、ごく簡単な説明ですでに四苦八苦しております。 下記HPを参考に始めたのですが、「^http://.+/$」の場合の「.+」の部分がよくわからずにおります。 http://www.scollabo.com/banban/php/php_15.html とりあえず、 「^http://」は、http:// から始まる場合 「/$」は / が末尾に来る場合 という理解なのですが、この私の理解で間違いはないでしょうか? 「.+」では、「 . 」は任意の1文字と説明があるのですが、ここでの 任意 とはどの部分をさす事なのかもよくわからないでいます。(/でしょうか?) リンク先HPでも本来十分解説がされているのかもしれませんが、「.+」について少しご解説をいただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現で

    正規表現で 8文字以上、15文字以内で1文字以上の英語(大文字小文字どちらか一方で可)と数字が含まれている表現を考えているのですが、思いつきません。 [0-9a-zA-Z]{8,15} だと全て数字・英語でも通ってしまうので、困っています。 どなたか詳しい方、ご教授ください。

  • 正規表現の添削をお願いします

    アルファベットと数字とスペースと「-」のみで構成される任意の長さの文字列をjavaの正規表現であらわしたいです。 [\s0-9a-zA-Z-]+ でいいのでしょうか? 最後の「-」がまずいような気がするのですが、[-]はどこに持っていくのが正しいのでしょうか。 他にも間違っているところがありましたら、教えて下さい。

  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • 正規表現を教えて下さい

    「2つ目のドット"."までに、1つのドットと8文字以上の数字を含む」という正規表現で悩んでいます。 正規表現が得意な方、ヒントを頂ければ助かります。

    • ベストアンサー
    • Perl
  • linuxで正規表現を使ってファイルをコピーしようとしているのですが正

    linuxで正規表現を使ってファイルをコピーしようとしているのですが正規表現の記述が間違っているためコピーできません. どこが間違っているのかまったく分かりません. ご教示よろしくお願いします. (コピーしたいファイルの数が少ないですが正規表現の勉強のため質問させていただきました. ) ========コピーしたいファイル群============ 0126-ad-g2.dat 0126-d-g2.dat ========================================== ========実行したコマンド================== cp [0-9]\{4\}-[a-z]\{1,2\}-g2\.dat ../g2/ ==========================================

  • 正規表現

    数字と大文字、小文字のアルファベットは入力OK。 記号も入力OK。でも、記号の中でも「”」、「.」は ダメ。しかも、10桁くらい入力できるようにする。 を表す正規表現は [a-zA-Z0-9&&[\"\.]]* と思ったのですが、 正しく表す正規表現はどの様なものになるのでしょうか? お願いします。

    • ベストアンサー
    • Java