web-dev-qa-db-ja.com

文字列に一致した後に単語を取得する正規表現

以下がコンテンツです。

Subject:
    Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
    Account Name:       ChamaraKer
    Account Domain:     JIC
    Logon ID:       0x1fffb

Object:
    Object Server:  Security
    Object Type:    File
    Object Name:    D:\ApacheTomcat\Apache-Tomcat-6.0.36\logs\localhost.2013-07-01.log
    Handle ID:  0x11dc

その行のObject Name: Wordの後の単語をキャプチャする必要があります。これはD:\ApacheTomcat\Apache-Tomcat-6.0.36\logs\localhost.2013-07-01.logです。誰かが私を助けてくれることを願っています。

^.*\bObject Name\b.*$一致-オブジェクト名

54

以下はあなたのために働くはずです:

[\n\r].*Object Name:\s*([^\n\r]*)

実施例

希望する一致はキャプチャグループ1にあります。


[\n\r][ \t]*Object Name:[ \t]*([^\n\r]*)

同様ですが、「blah Object Name:blah」などを許可せず、「Object Name:」の後に実際のコンテンツがない場合は次の行をキャプチャしないようにします。

36
smerny

しかし、試合結果は...試合グループではなく...

あなたがしようとしていることのために、これは動作するはずです。 \Kは、一致の開始点をリセットします。

\bObject Name:\s+\K\S+

Security IDマッチを取得する場合も同じことができます。

\bSecurity ID:\s+\K\S+
43
hwnd

あなたはほとんどそこにいます。次の正規表現を使用します(複数行オプションを有効にして)

\bObject Name:\s+(.*)$

完全な一致は

Object Name:   D:\ApacheTomcat\Apache-Tomcat-6.0.36\logs\localhost.2013-07-01.log

一方、キャプチャされたグループには

D:\ApacheTomcat\Apache-Tomcat-6.0.36\logs\localhost.2013-07-01.log

ファイルパスを直接キャプチャする場合は、

(?m)(?<=\bObject Name:).*$
7
Ravi Thapliyal

これは、使用している言語に応じて解決する場合があります

(?<=Object Name:).*

これは肯定的な後読みの主張です。詳細情報が見つかりました こちら

ただし、Javaスクリプトでは動作しません。あなたのコメントで、私はあなたがlogstashにそれを使用していると読みました。 logstashにGROK構文解析を使用している場合、動作します。ここで自分自身を確認できます

https://grokdebug.herokuapp.com/

enter image description here

2