web-dev-qa-db-ja.com

特殊文字 '|'の9回の出現を無視する正規表現

ログ行を解析するには正規表現が必要です。パイプ記号|が10回出現した後でデータを選択する必要があります

ログ行の例。

Info     device  Allow:FWD|TCP|data1|data2|data3|data4|data5|data6|data7|data8|data9|data10|data11|0|1|0|0|0|0||||||

上記のログ行からdata9を選択する必要があります。

以下は私が現在使用している式です、これはJavaプログラム用です

表現:

\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|([^|]*)\|

選択グループ11

文字を1つずつエスケープする代わりに、10個のパイプ記号をスキップ/無視してdata9を選択します

6
navi147

そのため、数量詞を使用します。

^(?:[^|]*\|){10}([^|]*)
30
Toto

別のプログラミング言語(Python、C#など)のコンテキストで正規表現を使用している場合、その言語には何らかのタイプの文字列分割関数が含まれている可能性があります。私の経験では、通常、正規表現を使用して分割するよりも、区切り文字で分割して値のリスト/配列を取得する方が簡単です。

21
Justin