否定先読みについて困っております。実行環境はatomです。
・プログラムは正規表現をどう理解してマッチ部分を判断しているのか、流れがしりたい。
(まず括弧内をひと固まりにする⇒左の塊から見ていく⇒マッチしたものが見つかった場合は正規表現の欄の左右に記号が無いかを見る⇒あった場合はその記号の意味を適用し先ほどのマッチした文字の条件をもう一度見る、のような)
汚くて申し訳ないのですが私の解釈はこうです。(私の考えの部分が間違っているはずです)
#現在の私の考え
###画像左
前方に「値段」という文字を含まない「値」という文字を検索する。
・24行目2文字目の「値」はマッチすると思っていたがしていない
・24行目4文字目の「値」は前方に「値段」という文字があるのでマッチしないと思っていたがしている
・「(?<!)値」という表記も試してみたが、atomでは使えないようだった
###画像右
後方に「値段」という文字を含まない「値」という文字を検索する。
・24行目二文字目は、後方に「値段」という文字が来ている為マッチしないと思っていたらマッチしている
#参考にしたサイト
https://msdn.microsoft.com/ja-jp/library/cc392020.aspx
https://abicky.net/2010/05/30/135112/
http://uxmilk.jp/50674
http://d.hatena.ne.jp/satosystems/20100519/1274237784
他多数
##所感
サイトによって表現がバラバラだったり、実際試してみると思い通りいくときといかない時がある。
根本的に理解が足りてないと思うが上手くいかない度合いがすごいので、基本の所で単純な勘違いをしているかも・・・
正規表現は理解が足りていないと、バグを簡単に入れ込んでしまうと思うので使用が怖い・・・
##追記2(混乱再び)(画像を載せる為)
・(?=hoge)
はhogeの左側の位置
とマッチングする
・(?<=hoge)
はhogeの右側の位置
とマッチングする
なるほど!位置とマッチング
という考え方が抜けていたのか
という事は(?!=hoge)
はhogeの左側以外の位置とマッチングするのかな?
orz...
ーーーーーーーーーーーーーー訂正ーーーーーーーーーー
私の書き方が間違えておりました。(?!e)
と否定先読みのアンカーだけで検索することで、e
前の空白文字列以外が検索されました。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
という流れを辿っています。位置とマッチングだと正規表現の書き方としてすごく分かりやすかったのでうれしかったのです残念です。
またこれでは、先読みと後読みという言葉の意味理解ができていないです。
###追記3
コメントでは表現が見えづらいのでこちらを使用させていただきます。
KSwordOfHaste様のコメントに対してです。
(?![a-e])[b-f]
と f
とのマッチングの様子を先読み後読みの表現が加わるように書いてみます。
1、検索文字列(?![a-e])
と本文fの左の位置
が比較される
2、検索文字列(?![a-e])
は次に本文[a-e]
が来る可能性があるため、本文fの左の位置
をとりあえずキープしつつも次の本文の文字を読んでみる(これが先読みと言われる所以)
3、本文f
が来た事により、検索文字列(?![a-e])
と本文fの左の位置
がマッチング
4、検索文字列(?![a-e])[b-f]
のうち(?![a-e])
がマッチングしたので、検索文字列[b-f]
の検索に入る
5、本文fの左の位置
はマッチングされたので次の検索比較される本文はf
6、検索文字列[b-f]
は本文f
と比較されマッチング
7、検索文字列(?![a-e])[b-f]
がすべてマッチングする箇所が見つかったので、本文f
(正確には{fの左の位置
+f
})はマッチングした文字列となる。
8、次の比較対象を求め検索文字列(?![a-e])
と本文fの右の位置
が比較される
9、検索文字列(?![a-e])
は次に本文[a-e]
が来る可能性があるため、本文fの右の位置
をとりあえずキープしつつも次の本文の文字を読んでみるが文字は無い
10、検索文字列(?![a-e])
はアンマッチングなので、本文を本文fの右の位置
から一文字進めようとするが無い
11、最後まで検索したので検索終了
この流れであってますかね?
###お礼
否定先読み正規表現のマッチング
がよく分からなかったので質問したのですが、Atomの使用や入力ミスそのほか様々な要素がアンマッチ
となってしまった為、コメント含め複雑化してしまったようです。
しかし、テスト用に正規化されているとはまったく言えない入力文字列の画像で始まる質問にも、親切に答えてくださる皆様とマッチング
できた事をとても嬉しく思っております。
お後がよろしいかは置いておいて、また色々な事を考えるきっかけとなりました。
ありがとうございました。
(僕はこの時間お腹が減る事を先読み
しキープしておいたお菓子を食べながら作業を進めたいと思います)

回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/10 07:13