ぞろ目の数字の正規表現について
いつもお世話になってます
正規表現の作り方について悩んでまして、皆様のお知恵を拝借したく
トリガーとなる文字列 ssk_message-9999999999
があるとします。数字の桁数はいくつになるか分かりません。
その状態で条件式をregexp(ssk_message-9*)だと99548654なども拾います。
また、regexp(ssk_message-9{2,20})としてとりあえず9が2桁以上20桁未満で引っかかるようにしているのですがこれだ例えば、999994521などもトリガーにかかってしまうのでなんとか9~999999999999...(全部の桁がすべて9)となる方法がないものかと試行錯誤している状態です
すみませんが、よろしくお願いいたします。
TNK - 投稿数: 4740
ssk_message-9999999999の後に文字列が付かないのであれば、
「ssk_message-9+9$」でいかがでしょうか?
wakaba - 投稿数: 228
こんなのでどうでしょう?
ssk_message-(\d)\1{0,20}$
ちなみに上記の場合、ssk_message-XXXXXXXXXXXXXエンドレスではなく、22桁目でNGとなります
ssk_message-Nの最初の数値が決まっている場合は、
ssk_message-N(\d)\1{0,20}$
としても良いです。この場合23桁目でNGだったはず・・・
monga - 投稿数: 15
TNK様、wakaba様コメントをいただきましてありがとうございます。
提示していただいた案で試したり、アレンジしてみたり試したのですが,999999...はちゃんとトリガーがかかるのですが例えば99999425143.....などもトリガーがかかってしまいました。ちなみに数字で終わりではなくそのあとにも文言がきますので$はダメみたいです
TNK - 投稿数: 4740
後ろに何が付くのか、具体的に例示して頂けませんか?
後ろに続くものも含めて正規表現で限定できるかもしれません。
Insight - 投稿数: 5
実機で試していませんが9が連続するだけであれば
ssk_message-9{2,}
でどうでしょう
正規表現では
文字{n,}:直前の文字がn回以上繰り返されている文字列に一致します。
となっています
TNK - 投稿数: 4740
これでは、最初に質問にある「全部の桁がすべて9」という条件を
満たせないと思います。
例えば、最初の質問にある、
ssk_message-99548654
ssk_message-999994521
などにも合致してしまいます。
Insight - 投稿数: 5
たしかにそうですね
制限したい文字列の詳細がわからないと難しいですね
・数字は9の連続
・後ろにつくのは文字のみであれば
ssk_message-9{2,}\D*$
でしょうか。
heya - 投稿数: 319
「ssk_message- の後に 9 が連続して、その後には数字以外が続く」
というのでよければ、ssk_message-9+[^0-9] でいいと思います。
・9 が二つ以上という条件もつけるなら ssk_message-99+[^0-9] となります。
・9 の連続で終わる可能性も考えるならまた変わってきます。
ssk_message-9+([^0-9]|$) でいいのか?(少し怪しい)
>ちなみに数字で終わりではなくそのあとにも文言がきますので
とあるのでこの可能性は考えなくてもいいんだろうとは思いますが。
・9 以外の数字も対象にしたいなら(0 の連続とか 1 の連続とかもすべて)、
wakaba さんの書かれたように () と \1 を使うといいです。
ssk_message-([0-9])\1*[^0-9] みたいな感じ。
・・・と、このように、具体的にどういうパターンを扱いたいのか、細かい条件によって正規表現はいろいろ変わってくるので、できる限り具体的に質問した方が、望む答えが返ってきやすくなりますよ。
余談ですが、Zabbix 3.4 以降なら [^0-9] の部分は \D としてもいいです。
monga - 投稿数: 15
皆様、コメントをいただきましてありがとうございます。
ssk_message-9+[^0-9]でうまくいきました。
具体的な質問ができず申し訳ありませんでした
こちらも実際のログがどのようにでるか不明で、担当者からマッチングする文字列のみ聞いておりまして。。
実際のログを見ようにもまだ開発段階でログはあるのですが中身が空っぽの状態でして。
とりあえず大丈夫そうです。
本当にありがとうごさいました