0

私は正規表現が初めてで、これを解決するのが非常に難しいと感じています:

次の文字列があります。

"inforun 7970 12423 99 10:03 ? 00:09:03 abcd -PR -gmh domain.den.abc.com -gmp 6020 -guid 9c06cc02-b1c8-41cf-93e6-1d795e9fff62 -rst 180 -s FOLDER_NAME:wkf_workflow.s_session -something Session task instance [session]"

timewhich10:03と the 'domain'indomain.den.abc.comと the FOLDER_NAME, the 'workflow'in the 'wkf_worklfow'and the 'session'in the 's_session', time,domainを抽出する必要があり、文字列ごとに変化し続けると、このような文字列がすべて 1 つの文字列として接続されますfoldername。以下は、すべてのストリングに共通するパターンです。theは一般的であり、すべての文字列で共通であり、これら 2 つの中間にある the の直前の時間を見つけるのに役立ちます。間にあり 、セッションが間にあり、すぐ次のworkflowsession'abcd -PR -gmh''?''-s', ':wkf'folder_name'workflow''wkf_''.s_''s_''-' 時間、ドメイン、フォルダー名、ワークフロー、およびセッションをすべて個別の文字列で指定する必要があります。ほんの数日前に正規表現を練習しようとしましたが、ここ"\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z"で与えられているようなものを理解するのにも時間がかかり ます 助けてくれてありがとう

4

3 に答える 3

0

正規表現(時間$1、ドメイン$2、フォルダー名$3、ワークフロー$4、セッション$5):

(?<=\s)(\d{2}:\d{2})(?=\s).*?(?<=\s)((?:[a-zA-Z\d]+(?:\-[a-zA-Z\d]+)*\.)+[a-zA-Z]{2,4})(?=\s).*?(?<=\s)([a-zA-Z\d_]+):wkf_([a-zA-Z\d]+)\.s_([a-zA-Z\d]+)(?=\s)

ルビー:

text = "inforun 7970 12423 99 10:03 ? 00:09:03 abcd -PR -gmh domain.den.abc.com -gmp 6020 -guid 9c06cc02-b1c8-41cf-93e6-1d795e9fff62 -rst 180 -s FOLDER_NAME:wkf_workflow.s_session -something Session task instance [session]"
text =~ /(?<=\s)(\d{2}:\d{2})(?=\s).*?(?<=\s)((?:[a-zA-Z\d]+(?:\-[a-zA-Z\d]+)*\.)+[a-zA-Z]{2,4})(?=\s).*?(?<=\s)([a-zA-Z\d_]+):wkf_([a-zA-Z\d]+)\.s_([a-zA-Z\d]+)(?=\s)/
puts $~.captures

出力:

10:03
domain.den.abc.com
FOLDER_NAME
workflow
session

こちらのコードを参照してテストしてください。

于 2012-06-29T17:20:56.963 に答える
0

使用できる正規表現を次に示します。私はRuby/RoRに十分に精通していませんが、実際に正規表現を使用したい場合、この正規表現は一度にすべてを取得する必要があります.

^.* (\d\d?:\d\d) \? .*? -gmh (.*?)\..*? -s (.*?):wkf_(.*?)\.s_(.*?) .*$

http://regexr.com?31da7にキャプチャ グループとその内容が表示されます。

$1    $2     $3          $4       $5
10:03 domain FOLDER_NAME workflow session

時刻が疑問符の直前にあり、数字 (オプションの数字) コロン数字の数字としてフォーマットされていること、ドメインが「-gmh」の直後に続くこと、フォルダー名が -s の後にあり、:wkf_ の前にあること、ワークフローが続くことを前提としています。 :wkf_、およびセッションが .s_ の後にあること

于 2012-06-29T17:32:04.033 に答える
0

Ruby 1.9 を使用していると仮定すると、出発点は次のとおりです。

/(?<time>\d{2}:\d{2}:\d{2}) abcd -PR -gmh (?<domain>[a-zA-Z]*)/i =~ s
/-s (?<folder_name>\w*):wkf_(?<workflow>\w*)\.s_(?<session>\w*)/i =~ s

これらの 2 行を実行すると、次のようになります。

1.9.3p125 :023 > time
=> "00:09:03" 
1.9.3p125 :024 > domain
 => "domain" 
1.9.3p125 :025 > folder_name
 => "FOLDER_NAME" 
1.9.3p125 :026 > workflow
 => "workflow" 
1.9.3p125 :027 > session
 => "session" 

ケースごとに許可される文字を定義し、エラー処理も追加する必要があります。

于 2012-06-29T17:32:04.233 に答える