メイプルの仮想について

メイプルでの仮想の導入についてはwikiを参照。

2017年12月13日のアップデート後?
今日のパッチを当てたらthemidaのせいで仮想で起動出来ない云々みたいな感じだったので調べてみたら

こちらのブログで既に解決してた。

VMXファイルに

を追加で起動できるようになる。

先/後読みによる条件分岐

言語によって対応してないものもあるらしい(javaでは未対応、perlでは対応)

条件分岐
(?(条件)真の時の処理)
(?(条件)真の時の処理|偽の時の処理)

後読みの条件分岐
(?(?<=pattern)真の時の処理|偽の時の処理)
patternの後ろに続く文字列に対しては真の時の処理
それ以外の位置にある文字列には偽の時の処理を適用する

条件分岐を使わずに
・「時」の前の数字は00~24
・それ以外の数字は一桁以上の数字にマッチ
を実装する例

同じ条件の後読みと否定後読みをorで分ける

キャプチャによる条件分岐

数字が一つ存在したとき\1にキャプチャ
数字が存在しない場合はそのまま\w*を評価
(1)で1番にキャプチャがされているかの条件

数字に続く英単語(0文字も含む)は真
それ以外は偽

後読みで困った所

対象の文字列

この正規表現でチェックすると

結果は

後読み(?<=pattern)をそのまま書いてみると

これはエラーになる。 理由は後読みのpatternが明白な最大長を持っていない為、 *は0文字以上 +は1文字以上

なのでこのように最大文字数を指定してあげることで 欲しい結果が得られた。

先読み/後読み

//参考

https://abicky.net/2010/05/30/135112/

https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6

3年と50年と100年

〇〇年というワードの1桁以上の数字だけマッチさせたい時

\d+年だとマッチするのは
3年
50年
100年

\d+(?=年)だとマッチするのは
1
50
100

指定された文字列の直前にある文字列をマッチ出来る
(?=\d+年)\d+
と記述した場合一桁以上の数字+年の並びになった文字列の直前の一にマッチし、その後に記述された
\d+でその位置に続く一桁以上の数字をマッチさせることになる為
実質 \d+(?=年) と同じ効果になる。

肯定的後読みは

<>で囲まれた中身のみをマッチさせたい
例えばbbbのaaaaと/aaaaだけ欲しい時は
(?<=<).+?(?=>)

否定はどちらも=を!にするのみ

キャプチャ

この(.+)はとてもおいしい\1だ。

このミカンはとてもおいしいミカンだ。

(.+)aaa\1bbb\1.

hogeaaahogebbbhoge

()にマッチしたものと同じ内容が\1に入っている文字列をマッチする。

———————————————————————————————
のような同じ文字に囲まれたものだけでなく前後で少し違いがある場合は

<(.*?).*?>.*?のようにキャプチャ外の文字も入れる。

—————————————————————–
複数回のキャプチャでは左から数えた開きかっこの順で\1や\2の順番が決まる

——————————————————————
(?:〇〇〇)とすることでキャプチャしないグループ化を行うことが出来る。

—————————————————————–
Perl、Javaではサポートされていない、
Python、PHP、.NETなどのエンジンで使える機能に名前付きキャプチャ

・PHPやPythonでの名前付きキャプチャの利用
(?P<名前>〇〇〇)
キャプチャしたテキストの参照
(?P=名前)
例:<(?P\w+)>(\w+)>.*

・.NETでの名前付きキャプチャの利用
(?<名前>〇〇〇)
キャプチャしたテキストの参照
\k<名前>
例:<(?\w+)>(\w+)>.*>>

最長マッチ/最短マッチ

最長マッチ 最短マッチ
* *?
+ +?
? ??
{n} {n}?
{n,} {n,}?
{n,m} {n,m}?

「*」は0回以上の繰り返し
この量指定子には最大限の広い範囲にマッチしようとする性質がある為、0回以上の無制限の繰り返しとなり対象とした文字列の一番最後まで適用されてしまう。

これは”hoge”あれは”fuga”です。

から”〇〇”という部分にマッチさせたいときに”.*”と書くと  “hoge”あれは”fuga”  までマッチする。
最短マッチの”.*?”を使う事で”hoge”と”fuga”にマッチさせることが出来る。

量指定子の後に?を付ける事で最短マッチにする事が出来るので1文字以上の場合は”.+?”

正規表現メモ

 

任意の一文字(全角/半角) .
ピリオド \.
( a-z と A-Z )及び(数字)と(_)一文字 \w
(a-z と A-Z)及び(数字)と(_)以外の一文字 \W
空白一文字(全角/半角空白 タブ文字) \s
空白以外の一文字 \S
半角数字一文字 \d
半角数字以外の一文字 \D
直前の文字を0回以上繰り返し
※0回以上なので直前の文字がないパターンも含む
*
直前の文字を1回以上繰り返し +
直前の文字をn回繰り返し {n}
直前の文字をn回以上繰り返し {n,}
直前の文字をn回以上m回以下の繰り返し {n,m}
直前の文字を0回または1回 ?
文字列の先頭 ^
文字列の末尾 $
単語の境界
(アルファベット・数字・_)と(それ以外の文字)との間の事を指す。
\b
単語の境界以外 \B
指定した文字のどれかにマッチ A or B or C [ABC]
指定した文字以外のどれかにマッチ
not A or not B or not C 
[^ABC]
マッチする文字の範囲指定
[0-9] :数字
[A-z]:アルファベット
[A-Z]:アルファベット大文字
[a-z]:アルファベット小文字
[ぁ-ん]:ひらがな
[ァ-ヶ]:カタカナ
[ヲ-゚]:半角カタカナ
[た-つ]:た~つのどれか1文字
[^0-9]:数字以外
[A-z]
指定されたどれかのパターンにマッチ  (OR)
文章中で使う場合は()で囲む
例:今日の天気は(晴れ|曇り|雨)です。
AAA|BBB|CCC
グループ化
()で囲むことで+や*などを直前の1文字ではなく直前の()内の文字に適用可能
(hoge!+){2,}や((abc){3})+のような表記も可能
()

 

 

「*」や「(」「+」「.」などのメタキャラクタ等の特殊な文字は直前に\を付ける事で文字として扱うことが出来る。

\sHello とした場合 \s→空白文字なので空白文字の後にHelloと続く文字列にマッチ

^Hello とした場合 ^は先頭を表す為、文字列の先頭の次にHelloと続く文字列にマッチ

Helloを末尾の文字列とマッチさせたい場合 .*Hello$

.*とした場合 任意の一文字を0回以上繰り返しなので任意の文字列にマッチ

.*\btest\b.*とするとtestという単語が含まれる文字列がマッチ

\btest\bとすると文字列の中にあるtestという単語がマッチ

\wは[A-Za-z0-9_]に相当

\Wは[^A-Za-z0-9_]

 

特定の文字を大文字/小文字区別せずに [Hh][Oo][Gg][Ee]

aのみを含む小文字のaから始まる英単語を抜き取る \ba\w*\b

台形公式

//参考

https://ja.wikipedia.org/wiki/%E5%8F%B0%E5%BD%A2%E5%85%AC%E5%BC%8F

\(x ∈(a,b)\)の時、\(f(x)>0\)とする定積分

\(\int_a^b f(x) dx\)の近似値を求めたい時、\(f(a)\)と\(f(b)\)を直線で結んだ一次関数で近似する事により台形の図形として見なすことが出来る。
参考先の画像を参照

$$(台形の面積)=\frac{((上底)+(下底))\times(高さ)}{2}$$

上底+下底→\(f(a)+f(b)\)
高さ→\((b-a)\)
を上記の台形の面積の公式に当てはめると

$$\int_a^b f(x) dx \approx \frac{(f(a)+f(b))\times(b-a)}{2}$$

台形公式では曲線\(y=f(x)\)が直線に近いほど精度が高くなり、直線と全く異なる曲線になるほど精度が悪くなる。

そこで、積分区間\([a,b]\)をさらにN個に分割し、それぞれの区間を台形として計算する事で精度を上げる事が出来る。
参考先の画像を参照

N個に分割した時の刻み幅hはx軸の範囲(b-a)をN等分したものになる為
$$h=\frac{(b-a)}{N}$$

分割した際にそれぞれの台形の面積を求める時に使用される上底下底は端である\(f(a),f(b)\)については一度のみ、それ以外は二度使用される為

$$\int_a^b f(x) dx \approx h\times\biggl\{\frac{f(a)+f(b)}{2}+\sum_{i=1}^{N-1}f(a+h\times i)\biggr\}$$

以下プログラム

gnuplot折れ線グラフと画像出力

//参考

・折れ線グラフの描画
http://www.rsch.tuis.ac.jp/~mizutani/online/gnuplot/gnuplot2.html

http://kgeewimp.hatenablog.com/entry/2015/11/24/000415

http://coral.t.u-tokyo.ac.jp/hoshi/edu/gnuplot.html

・出力
http://graph.pc-physics.com/image.html