正規表現について、、、
以下の数式において、xの係数(14)を正規表現で抜き出したいです。
「y=5x**2+14x+17」
最初は、肯定戻り読み・否定戻り読みを以下のように設定しました。(以下は正しくないです/失敗)
(?<=[=|+|-])\d*(?!x*)
これだと動作しません、、、
数値判定の桁を指定せずに(\dの後のを削除して)
(?<=[=|+|-])\d(?!x)
だと動くのですが桁数が正しく設定されないため不可です。
最終的に、
(?<=[=|+|-])\d+(?!x*)
で動いたのですが、
+ではokで、*では正しく動かない理由を知りたいです。
*は最長マッチングでokだと自分的には思っていたんですけど、、、
(?<=[=|+|-]) → '=', '|', '+', '-' のいずれかの後の位置にマッチ
(?!x\*) → x* の前でない位置にマッチ
\d* → 0 文字以上の数字にマッチ
つまり、'=', '|', '+', '-' のいずれかの後で、x* の前でない位置にある 0 文字以上の数字にマッチします。
この中で一番前にあるのは、y= の後の 0 文字の数字です。(5 は x* の前にあるためマッチしません)
\d* を \d+ にした場合は確かに 14 にマッチしますが、正規表現の意味を考えると偶然に近いものに思えます。たとえば 5 のところが 10 であれば 14 にはマッチしません。