2016-05-11 9 views
0

私の環境のホストに基づいて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-.*)の正規表現をすれば、それは動作しますが、私の正規表現の残りの部分にそれを追加し、それは結果を返しません、なぜわかりませんか?

+0

これまでに書いたコードを含むように質問を編集してください。 –

+0

更新しました。私はそれから多くの情報を書き直さなければならず、サンプル正規表現をもっと小さくしました。 – Mallachar

+0

正規表現の '*'はリテラルですか?もしそうなら、リテラルになるためには '\ *'をエスケープする必要のあるメタキャラクターでもあります。それ以外の場合は、それは限定子です。しかし、量指定子は他のメタキャラクタを数量化することはできません。だから、それは、 '('もメタキャラクターであるので)スローされます。 – sln

答えて

0

これは有効な正規表現ではありません。同じではないシェルのワイルドカードが混在しているようです。

*を繰り返すには何かが必要です。たとえば、(.*-router-.*)です。

+0

私はそれを試みた。私は(。* - router - 。*)でしたが、名前をルータに入れても0の結果が得られます。テーブルをプルアップすると、その命名規則で少なくとも50のデバイスが見えます。 – Mallachar

1

これはうまく機能していますが、問題は、-routers-がupdatedateやinstalldateなどの他のものと一致しないということです。だから正規表現は正常に動作します.*-router-.*

+0

疑問点を削除してください。それは恥ずかしいものです。 –