私の環境のホストに基づいて15日ごとに情報収集を自動化するPyhtonスクリプトにSQLクエリを書き込もうとしています。これを行うには、正規表現を使用する必要があります。なぜなら、私が使っている名前のバリエーションがたくさんあるから、LIKEを使うのはオプションではありません。。* mysqlの式が動作しない
私が取り組んでいる問題の1つは、名前の中に中間に識別子があるものがあります。通常、ホスト名はDesktop-Acc-1515などの名前が付けられています。しかし、私がここで作業を始める前に設計されたネットワーキングデバイスは、この "set151-router-b1-5b42"のように名付けられています。それはどのように大まかな考えです。
通常、通常の環境で動作する.*-router-.*
のような正規表現を使用しますが、MySQLでは-router-を指定して0の結果を返すので、MySQLはそれを気に入らないようです。
は、どのように私はここで私は一種のやっているものの編集さバージョンがある-router-
の両側に「何」を探すために、MySQLの正規表現のクエリを実行することができます。
奇妙なSET SESSION group_concat_max_len = 1000000;
SELECT Count(distinct table1.HostName)
FROM vulnerability
LEFT JOIN table2 on table1.Id = table2.Id
LEFT JOIN table3 on table1.Id = table3.Id
LEFT JOIN table4 on table1.Id = table4.Id
LEFT JOIN table5 on table1.Id = table5.Id
LEFT JOIN table6 on table1.Id = table6.Id
WHERE table1.UpdateDate > (NOW() - INTERVAL 20 DAY)
AND table2.InstallDate > (NOW() - INTERVAL 20 DAY)
AND table1.Hostname REGEXP
"Desktop-(Oregon|Idaho|Wyoming)|WorkStation-(Oregon|Idaho|Wyoming)|(.*-router-.*)"
更新/編集
、私はJUST (.*-router-.*)
の正規表現をすれば、それは動作しますが、私の正規表現の残りの部分にそれを追加し、それは結果を返しません、なぜわかりませんか?
これまでに書いたコードを含むように質問を編集してください。 –
更新しました。私はそれから多くの情報を書き直さなければならず、サンプル正規表現をもっと小さくしました。 – Mallachar
正規表現の '*'はリテラルですか?もしそうなら、リテラルになるためには '\ *'をエスケープする必要のあるメタキャラクターでもあります。それ以外の場合は、それは限定子です。しかし、量指定子は他のメタキャラクタを数量化することはできません。だから、それは、 '('もメタキャラクターであるので)スローされます。 – sln