大括弧で囲まれていない最初のパイプ文字まですべてを抽出しようとしている次の行があります。 PCRE Regex - 大括弧で囲まれていない最初のパイプにすべて一致する
action=search sourcetype=audittrail [ localop | stats count | eval search_id = replace("$top10_drilldown_sid$", "^remote_[^_]*_", "") | table search_id ] [ localop | stats count | eval earliest = $top10_drilldown_earliest$ - 86400 | table earliest ] latest="$top10_drilldown_latest$" | stats values(savedsearch_name) AS search_name
予想される出力:
action=search sourcetype=audittrail [ localop | stats count | eval search_id = replace("$top10_drilldown_sid$", "^remote_[^_]*_", "") | table search_id ] [ localop | stats count | eval earliest = $top10_drilldown_earliest$ - 86400 | table earliest ] latest="$top10_drilldown_latest$"
すなわちすべてが、いくつかの前後参照例次| stats values(savedsearch_name) AS search_name
を末尾に、私は(ほぼ)私はJavaScriptの正規表現式
を使用して必要なものを得ることができます/.*\|(?![^\[]*\])/g
- http://refiddle.com/refiddles/596dec4c75622d608f290000
しかし、これはうまく機能していたPCRE互換の式には変換されませんでした(さらに、最初のパイプまで含めてすべてをキャプチャしたい)。
私が読んだところでは、最初の括弧で囲まれたセットのネストされた大括弧は回避できない複雑な問題ですか?唯一のいずれかの指定されたセットの中でネストされた括弧の1つのレベル(例えば[..[]..]
または[..[]..[]..]
)
は、私は私が正&負の前後参照の周りに完全に私の頭を持っているとは思わないことを認めるが、任意のヘルプは大幅だろうがあるでしょう感謝!このような状況では、すべてと一致するように、より効率的な
ブラケットのバランスが取れていることがわかっている場合は、['^(?:(^)|] ++ |(?1))*])| [^ |])+ \ K \ | '](https://regex101.com/r/6ZJpqN/1)。しかし、そうである必要はありません、あなたの文字列に '\]'が含まれているかもしれません。 –
ありがとう@WiktorStribiżew - これは私のための新しいコンセプトの多くです。私はそれの周りに私の頭を取得しようとします。あなたが送った例を見て、私は私が得ることを期待していたものを含めなかったことを実感します。私は今それを編集します。 – Arrjo
['\ K \ |'を削除](https://regex101.com/r/6ZJpqN/2) –