質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

1回答

676閲覧

特定の場所に存在する、"特定の文字列を含まない、その特定の文字列以外の任意の文字列"にパタンマッチしたい

aka-persona

総合スコア7

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2021/12/17 01:47

編集2021/12/20 00:44

前提・実現したいこと

特定の場所に存在する、(特定の文字列を含まない、その特定の文字列以外の任意の文字列)にパタンマッチしたい

発生している問題

マッチさせたいものは、特定の拡張子以外の以下のようなログ。
※Javaベースのログ管理ツールで、ワンライナーで一発マッチさせないといけないので、1行ずつ変数につっこんで、条件分岐何回かする、みたいな素朴な解決策が採用できないのです…

マッチさせたい文字列

log

1- - [20/Nov/2021:20:26:53 +0900] "GET /hogehoge/fugafuga.html HTTP/1.1" 200 84550 "https://foobar/foo/bar.html?" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" "-"

試した正規表現

RegExp

1"(GET|POST)\s+(?[^\s"]*(jpg|svg|tiff))\s+"\s+200

試したこと

特定の文字列(拡張子)を除外することと、特定の拡張子(htmlとか)だけにマッチさせるだけだった場合はできるが、試した正規表現のように、指定した拡張子以外のすべての拡張子にマッチさせることの解決策が調べた範囲では見つからなかった。

補足情報(FW/ツールのバージョンなど)

javaはopenjdk 11.0.10
内部的に使用しているのはJava.util.regexpのようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/12/17 16:51 編集

記述がわかりません。 > 特定の文字列を除外することだけだった場合はできる ということですが、それができるのであれば、 > それ以外のすべての拡張子にマッチさせること は出来ると思うのですが、どこか日本語の記述が間違ってませんか? 「拡張子がこれこれの場合の除外」と「拡張子がこれこれ以外にマッチ」は同じに見えます。 全然違うことを言っているのであれば、もう少し説明してください。 結局のところ、どういう入力に対して、どういう出力が得たいのか質問文からは不明です。
aka-persona

2021/12/20 00:42 編集

試したことをもうすこし書き改めました 特定の文字列(拡張子)を除外することと、特定の拡張子(htmlとか)だけにマッチさせるだけだった場合はできるが、試した正規表現のように、指定した拡張子以外のすべての拡張子にマッチさせることの解決策が調べた範囲では見つからなかった。
otn

2021/12/20 09:13

コメントした内容がわからないと言うことですかね。うーむ。 下記の文章の意味がわかりますか? > 「拡張子がこれこれの場合の除外」と「拡張子がこれこれ以外にマッチ」は同じに見えます。
guest

回答1

0

CLIでone linerで行うなら兎も角、Javaで行うなら特定の文字列(jpg|svg|tiffの拡張子を持つリクエスト?)か判定して
マッチしたら除外していく方が考え方としはスマートな様に思います。

投稿2021/12/17 02:29

Luice

総合スコア771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aka-persona

2021/12/17 02:43 編集

すいません!!!ワンライナーでないといけない環境でした。。追記しておきます。 そうですよね、普通そうですよね。。。
Luice

2021/12/17 02:33

Javaなのにワンライナーで処理しなければいけないんですか?
aka-persona

2021/12/17 02:45

それがJavaベースのログ管理ツールで、内部はJavaですが、とりあえず変数につっこんで、バリデーションを何回もかける、みたいなことはできない環境下で、一発マッチさせないといけないのです。
Luice

2021/12/17 04:32

「Javaのツール」でということなら、タイトルやタグからJavaは外してください。 今回の件は正規表現で解決しなければいけない問題で、Javaで解決できる問題ではないので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問