MW211 EXIT

devlog
正規表現/直前直後の組み合わせ
2012年03月28日
直前と直後に特定の文字があるもしくはないものを検索する組み合わせは以下の通り。
┌──┬─────┬─────┐
│    │   直前   │   直後   │
├──┼─────┼─────┤
│あり│ (?<=z)a  │ a(?=z)   │
├──┼─────┼─────┤
│なし│ (?<!z)a  │ a(?!z)   │
└──┴─────┴─────┘
※「a」と「z」は文字列の例(何の文字列でもよい)

「az,za,ay,ya」があったとしたら、上記の正規表現に該当するのは以下の通り。
┌──┬─────┬─────┐
│    │   直前   │   直後   │
├──┼─────┼─────┤
│あり│    za    │    az    │
├──┼─────┼─────┤
│なし│azとyaとay│zaとyaとay│
└──┴─────┴─────┘
但し、該当するとみなされる文字(検索文字)はそれぞれの「a」のみ。

ちなみに前後の文字も含みたい場合は以下の通り
┌──┬─────┬─────┐
│    │   直前   │   直後   │
├──┼─────┼─────┤
│あり│    za    │    az    │
├──┼─────┼─────┤
│なし│  [^z]a   │  a[^z]   │
└──┴─────┴─────┘
ただし、こちらは改行やら区切文字やらも該当してしまうので、
上記のように該当するものがはっきりするとは限らない。
→あくまで理論上の対比と考えてもらいたい
分類:正規表現
正規表現/前に特定の文字がつかないものを検索
2012年03月27日
「a」単体や、「ac」の「a」は検索できるけど、「ab」の「a」は検索できない
つまり、後ろに「b」が続かない「a」を検索する正規表現は以下の通り。
┌──────────────────────────────────────┐
│a(?!b)                                                                      │
└──────────────────────────────────────┘

ではこの反対は(前に「b」がない「a」)というと…
┌──────────────────────────────────────┐
│(?!b)a                                                                      │
└──────────────────────────────────────┘
ではない。
→これだと、「ba」の「a」も該当してしまう。

正解はこれ。
┌──────────────────────────────────────┐
│(?<!b)a                                                                     │
└──────────────────────────────────────┘
と、「<」がいれてあげなければならない。

なんでも「a」を基準にして、さかのぼって左側を見てあげなければならないので
さかのぼりに記号「<」が必要らしい。
分類:注意、正規表現
正規表現/「1~999」を判定
2012年03月21日
┌──────────────────────────────────────┐
│^([1-9][0-9][0-9]|[1-9][0-9]|[1-9])$                                        │
└──────────────────────────────────────┘
上記のように、「100~999」or「10~99」or「1~9」とする?

いやいや。

┌──────────────────────────────────────┐
│^[1-9][0-9]?[0-9]?$                                                         │
└──────────────────────────────────────┘
上記だと、or条件なしに一発で指定できる。

つまり「?」は、「ある」かもしれないし「ない」かもしれないという意味。
分類:正規表現
秀丸/正規表現の最長一致の原則
2012年03月15日
秀丸エディタの正規表現は「最長一致の原則」に従っている。
「【a】【b】」の場合、「【.+】」とすると
「【a】」ではなく「【a】【b】」までが該当する。

最短一致にするにはどうすればよいか?

「【.+?】」と「+」(もしくは「*」)の後ろに「?」をつけるのが
一般的な正規表現の最短一致指定だ。

ただ「【[^】]*】」という方法もある。

こちらだと「【[^】]*】(?!【)」というのも効く。
→【b】だけ検出してくれる。

「【.+?】(?!【)」だとこれが効かないようだ。
→「【a】【b】」を検出してしまう。
分類:秀丸エディタ、正規表現
正規表現/数値(4)
2012年02月28日
2桁数字限定の簡単技。
0~99  →  /^[1-9]?\d$/
1~99  →  /^[1-9]\d?$/

3桁以上になると、これらは使えない
0~999  →  /^[1-9]?\d\d$/  …①
1~999  →  /^[1-9]\d\d?$/

①で「01」が通ってしまうのだ。
分類:正規表現
正規表現/数値(3)
2012年02月24日
小数点以下も含めたい場合。

「-999.99~999.99」の範囲としたい場合。

「((0|\-?[1-9]\d{0,2})(\.\d{2})?)」

「.」だけではだめ「.00」と小数点以下の数字が必要ってこと。

「((0|\-?[1-9]\d{0,2})(\.\d{1,2})?)」

こうすれば「9.99」でも「9.9」でもOKとなる。
分類:正規表現
正規表現/数値(2)
2012年02月23日
負の数も含めたい場合。

「-999~999」の範囲としたい場合。

「(0|\-?[1-9]\d{0,2})」

「0」と「-999~-1」「1~999」みたいな感じか。
分類:正規表現
正規表現/数値(1)
2012年02月22日
「0123456789」を表すものは「[0-9]」か「\d」。

なので「\d\d\d」とすれば「000~999」の数値を表すことができる。

だが、数値は「001」ではなく「1」と書くもの。

なので、「1~999」としたい。

それには「[1-9]\d{0,2}」。

あ、「0」が抜けている、「0~999」だ。

でも「0」は別枠にせねばなるまい、よってこう。

「(0|[1-9]\d{0,2})」

「0」か「1~999」で「0~999」。
分類:正規表現
正規表現/任意の文字
2012年02月21日
任意の文字的なものをまとめてみた。
「.」 …正規表現における任意の一文字
        数値表現における単なる小数点の場合もあるが
        任意の一文字は小数点一文字も含むので、
        小数点のつもりが気づかず勘違いしたままということもありうる
「*」 …MS-DOS(Windows)におけるワイルドカード
        正規表現的には「.*」と同等
        正規表現では「直前の文字を0回以上繰り返す」の意味となる
「%」 …SQLのLIKE検索におけるワイルドカード
「_」 …SQLのLIKE検索における任意の一文字
        Windows環境のファイル名に使えるなど各種制約にとらわれにくい文字で
        通常の世界ではこの文字自体をあまり使わないので
        空欄に見せて、任意、未決定もしくはトラブルによる欠落っぽいイメージを
        表現できる
「 」 …空欄として、任意、未決定もしくはトラブルによる欠落っぽいイメージを
        表現できるが、両端に配置する場合には、開始・終了の境界文字が必要で
        「 」を文中に許容する場合には見分けがつかないので使えない
        穴埋めテストで慣れ親しんでいるが、プログラムでは用いられない
「?」 …謎の一文字として、任意、未決定もしくはトラブルによる欠落っぽいイメージを
        表現できる
        実際に文字化けの場合「?」になるケースもある
        正規表現では「直前の文字を0~1回繰り返す」の意味となる
「0」 …数値項目を表す「0-9」
        特にゼロパディングを表す場合に使われる(Excelなど)
「9」 …数値項目を表す「1-9」「0-9」
        「0」との対比でゼロサプレイスを表す場合が多い
        COBOLの世界で9タイプといえば数値型を意味する
「#」 …数値項目を表す「1-9」「0-9」
        「0」との対比でゼロサプレイスを表す場合が多い(Excelなど)
「X」 …COBOLの世界でXタイプといえば半角文字型を意味する
「S」 …符号を表す「+-」
        大抵は符号がない場合(正の数の場合)も許容するので
        どちらかというと負の数を許容することを表すもの
「-」 …符号を表す「-」
        前述の「S」同様、負の数を許容することを表すもの
「N」…COBOLの世界でNタイプといえば全角文字型を意味する
        「NIHONGO」の頭文字か
「 」…「 」の全角版
        表示上、全角空白文字を特殊記号で表示する環境(エディタなど)でしか
        判別できないので、
「_」…「_」の全角版
        プログラム的にはほとんど用いられない(文書(仕様書等)の世界でのもの)
「■」…文字化けした場合に変換されやすい文字
        転じて任意の一全角文字を表すが
        プログラム的にはほとんど用いられない(文書(仕様書等)の世界でのもの)
「□」…穴埋め空欄的な表現
        プログラム的にはほとんど用いられない(文書(仕様書等)の世界でのもの)
「△」…仕様書上、全角空白を表す記号
        ちなみに「▲」が金額の前につくと「-」(負の符号)
他に以下など
「!」
「@」
分類:正規表現
正規表現/そっくりさん
2012年02月19日
そっくりさんだと微妙に違うが、これは正真正銘同じもの同士。

「[0-9]」=「\d」

「?」=「{0,1}」
分類:正規表現
前へ 1 2 3 次へ