正規表現の解読方法について教えてください

このQ&Aのポイント
  • 正規表現が解読できずに困っています。ネットでの検索では一部は解読できたものの、全体を理解することができません。
  • 対象ファイルの認識規則が正規表現で記載されているのですが、正規表現について無知なため解読できません。
  • 具体的な正規表現パターンとして、[A-Z0-9]や{4,4}などが使われています。どなたか教示いただける方はいらっしゃいませんか?
回答を見る
  • ベストアンサー

正規表現が解読できません。

ツールが対象ファイルを認識する規則が正規表現で記載されているのですが、 正規表現について無知なため、解読することができずに困っております。 ネット等で検索し、[A-Z0-9]や{4,4}など部分的には解読することができたのですが・・・ FILE_COPY.REGEX1=<ABC>\t.+\\\\ABC(\\\\.*)?\\\\[A-Z0-9]{4,4}[0-9]{3,3}[A-Z0-9]+\\\\[A-Z0-9]{4,4}[0-9]{3,3}[A-Z0-9]+\\.gz FILE_COPY.REGEX2=<DEF>\t.*\\\\[^\\\\]*(?<\!\\.tar) FILE_COPY.REGEX3=<GHI>\t.+\\.xml\\.gz どなたかお時間のある方がいらっしゃいましたら、ご教示いただけないでしょうか。 どうぞよろしくお願いいたします。

noname#175991
noname#175991

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

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

まず、この正規表現を処理するのが何かを確認して、そのマニュアルとか説明書とかを読むこと。 正規表現は、その処理するプログラム言語やライブラリによって違いがあります。 \\が多く出てきているので、予想としては、一度\によるエスケープを処理したものが正規表現になっていると思われます。 これは、CやJavaで文字列に\を記述するときに "\\"等と書くのと同様ではないかと思われます。 また、 FILE_COPY.REGEX1= で、設定の順番 ファイル名に一致させようとするなら、\t(タブ文字)がファイル名に含まれるのも稀なので <ABC> が設定名かなにか、 \t が前後の区切りで、後半が正規表現ではないかと予想されます。 これらは、そのファイルの中身がどうなっているかを、マニュアルなので確認してください。 正規表現の基本は 「文字列を特定するためパターン」「そのパターンがいくつ続くか(1回だけなら省略可」 のくりかえしです。 .+\\\\ABC(\\\\.*)?\\\\[A-Z0-9]{4,4}[0-9]{3,3}[A-Z0-9]+\\\\[A-Z0-9]{4,4}[0-9]{3,3}[A-Z0-9]+\\.gz は、先のように\を処理して .+\\ABC(\\.*)?\\[A-Z0-9]{4,4}[0-9]{3,3}[A-Z0-9]+\\[A-Z0-9]{4,4}[0-9]{3,3}[A-Z0-9]+\.gz という正規表現だと思われます。 これを上記の「パターン」と「数」に分解していくと .+ \\ A B C (\\.*)? \\ [A-Z0-9]{4,4} [0-9]{3,3} [A-Z0-9]+ \\ [A-Z0-9]{4,4} [0-9]{3,3} [A-Z0-9]+ \. g z となり、それぞれ .+ .は任意の文字。それが1つ以上続くものにマッチ \\ \は後の文字とセットで特殊な意味を持ったり、元の意味を消したりする。この場合は、\の特殊な意味を消し、「\という文字」にマッチ A Aという文字にマッチ B Bという文字にマッチ C Cという文字にマッチ (\\.*)? (\\.*)というパターンが0個か1個。()の中は 「\の後に0文字以上の任意の文字列」 \\ [A-Z0-9]{4,4} [A-Z0-9]が4回。つまり [A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9] の意味 以下略 となっていきます。これでどんなパターンがマッチするかわかると重います。 3番目は非常に簡単です。 2番目でややこしいのは (?<\!\\.tar) の部分で、おそらく ・\!というのはあまり標準ではありませんが、!がコメント等の特殊な意味になるので、\で打ち消しているのではないでしょうか? ・そうなると、↓の意味になりそうです。が、他の意味かもしれません http://www.kt.rim.or.jp/~kbk/regex/regex.html#NEGATIVELOOKBEHIND

noname#175991
質問者

お礼

丁寧な回答を頂き、大変感謝しております。 ご回答をもとに、マニュアルと比較しながら細かい点を確認したいと思います。 この度はありがとうございました。

関連するQ&A

  • 「マッチしない」正規表現の書き方

    正規表現について、おたずねします。 文字列 abc,def,ghi のいずれかにマッチする正規表現は (abc|def|ghi) ですよね。 それでは、「abc,def,ghi のいずれにもマッチしない」正規表現は、どう書けばいいのでしょうか? あちこち調べましたが、どうしてもわかりません。 ただし、if $a =~ /(abc|def|ghi)/ などで、=~ を !~ に直す、というのはナシです。あくまでも右辺の式の中で表現したいのですが…

  • 正規表現でのパイプ(or)を減らしたいのですが

    いつもお世話になっています。 正規表現のパイプ(|)は非常に遅くなるらしいので、[]内に並べるようにプログラムを修正しようと思っています。それで、 /a|b|c/ ---> [abc] のような方法は、よく紹介されているのですが、a,b,cが単独文字ではなく、単語になっているような場合、 /abc|def|ghi/ ---> [(abc)(def)(ghi)] だと多分ダメですよね(今実行環境が無く確認できません)。 それで、各々の単語を $a = 'abc'; $d = 'def'; $g = 'ghi'; のようにあらかじめ定義しておいて、 /$a|$d|$g/ ---> [$a$d$g] というように書き換えると、うまくいくのでしょうか? やり方が間違っていましたら、ご指摘いただきたく、よろしくお願いします。

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

    正規表現について教えて下さい $string = "LibrayMyUtil2File AppFile"; $pattern = '/([A-Z][a-z0-9]*)*([A-Z][a-z0-9]*)File/'; $replacement = '$2'; echo preg_replace($pattern, $replacement, $string);//Util2 App と表示される この例のように、「File」の前の単語に置き換えたいのですが、 このやり方だとpatternの「[A-Z][a-z0-9]*」が重複しているのが凡長だと思ってまして もっと短縮された書き方があれば教えてもらいたいです。

    • ベストアンサー
    • PHP
  • 秀丸の検索・置換の正規表現の最短一致の挙動が変です

    秀丸の検索または置換の正規表現の 最短一致での挙動ですが、 /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz の先頭にカーソルを置いた状態で、 (質問1) 正規表現のチェックボックスをチェックして /.*$ で検索すると /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されると思うのですが 実際には /def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます。 なぜでしょうか。 (/abc/.*$とするとカーソルがある /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz ではなく次の行以降の /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます?) (質問2) 正規表現のチェックボックスをチェックして /.*?$ で検索すると最短一致となるため /uvw.xyz が検索されると思うのですが 実際には /def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます。 なぜでしょうか。 (なお、/[^/]*$では/uvw.xyzが検索されます)

  • 正規表現で

    正規表現で、英大文字と記号だけからなる文字列、を表すにはどうすればよいでしょうか。言い方を変えると、とにかく英小文字は含まないという事なんですが… [^a-z]+ かなと思ったのですがダメでした。 123#ABC : OK 123#aBC : NG みたいな感じです。 よろしくお願いします。

  • c#の正規表現がうまくいきません

    c#の正規表現がうまくいきません 以下のhtmlから指定の文字列を抜き取ります(htmlは適当です) ---------------------------------------- <select class="iiy_name_list"> <option value="1347">abc</option> </select></td> <select class="sug_name_list"> <option value="761">def</option> </select></td> ---------------------------------------- 2行目の"abc"、5行目の"def"の2つをキャプチャで得たいのですが、 @"<option\s+[^>]*>(.*)</select>",という指定では5行目の"def"しか得られません forを使って2回のループで一つ目の変数に"abc"二つ目の変数に"def"を入れるには どうしたらよいのでしょうか? 以下のページを参考にしたのですが、うまくいきません… http://uchukamen.com/Programming1/RegEx/index.htm よろしくお願いします。

  • サクラエディタの正規表現での置換

    サクラエディタの正規表現での置換の方法について教えて下さい。 行の末尾が数字で終わらない行の改行コードを削除したいと考えています。 ---------- 元ファイル ---------- 000abc123 777def 456 333ghi789 222jk+ 111 ---------- ---------- 加工後 ---------- 000abc123 777def456 333ghi789 222jk+111 ---------- 「置換前」は『[^0-9]\n』を入力することで検索できましたが、 「置換後」に何を設定すれば良いのかわかりません。(または「検索対象」の設定を変える必要があるのかなど) 例えば置換後に何も設定しないと「777de456」とfが消えてしまうため、”f”を残した上で改行コードを削除したいのですが その方法がわかりません。 よろしくお願いいたします。

  • 正規表現を使った置換処理。大文字の直前に「_」を入れたい

    正規表現を使った置換処理です。 大文字の直前に「_」を入れたいと思っています。 例:htmlLinkStr → html_Link_Str WSHとして以下のようなコードを1行記述しました。 WScript.Echo("htmlLinkStr".replace(/([A-Z]+)/g, "_" + RegExp.$1)); しかし「html_ink_tr」としょぼい結果しかえられません。 「RegExp.$1」の使い方が悪いのかもしれません…。 ちなみにVBSでは以下のコードで成功しています。 ので大きくはずしてはいないと思うのですが… Set regEx = New RegExp regEx.Pattern = "([A-Z]+)" regEx.Global = True MsgBox regEx.Replace("htmlLinkStr", "_$1") JavaScriptでの正規表現の使い方に詳しい方よろしくお願いします。

  • 正規表現の\\が認識されない?

    現在、PHPで正規表現を用いてURLをホスト名・パス名・クエリー部分を分けて出力するPGを作成しているのですが。 どうやら、'\\'が'\'(バックスラッシュ)として表現できていないようなのですが? なぜでしょうか? ご教授お願いいたします。 【PG】 $regexが正規表現内容 ↓ $regex = '/^(?:https?|ftp):\/\/([-.!~*\'()\w;:\@&=+\$,%#]+)\/?([-.!~*\'()\w;\/:\@&=+\$,%#]*)\??([\\-.!~*\'()\w;\/:\@&=+\$,%#]*)$/'; if( preg_match($regex, $str, $match) ) { echo $match[1]."\t".$match[2]."\t\n"; } else { echo "URLではありません。\n"; }

    • 締切済み
    • PHP
  • 文字列を含まないという正規表現は?

    お世話になります。 例えば、文字「a」を含まないという正規表現は、 "[^a]" となりますが、文字列「abc」を含まないという正規表現はどうなりますでしょうか? "[^abc]" ではだめでしたし、 "[^(abc)]" でもだめでした。 また、改行などの制御文字を含めたどんな文字でもいいという正規表現はどうなりますでしょうか? ".*" では改行などが含まれるときはだめでした。 どうかご教授のほどよろしくお願い致します。 次のサイトは参考にしたサイトです。 正規表現の解説 目次 http://www4.ocn.ne.jp/~kaerume/k2e/regex_top.html#mnu_top

専門家に質問してみよう