-2

以下の問題を解決できなかったので、Perlスクリプトを使用して正規表現なしで解析しましたが、正規表現があると思います。

入力文字列(改行はありません):

ObjectAddress=120.146.128.250,ObjectName=psyseds-tt1y,ObjectClass=SCM F5,ObjectDescription=,Aliases=psyseds-tt1y.site.com.,NameService=A,PTR,DynamicDNSUpdate=A,PTR,CNAME

期待される出力

ObjectAddress=120.146.128.250
ObjectName=psyseds-tt1y
ObjectClass=SCM F5
ObjectDescription=
Aliases=psyseds-tt1y.site.com.
NameService=A,PTR
DynamicDNSUpdate=A,PTR,CNAME

,文字列を解析するために正規表現を試しましたが、値が分離された複数の項目があるため、解析に失敗しました。たとえば、NameServiceには2つの値A、PTRがあります。

上記で解析する正規表現の作成を手伝ってください。 (.+?=.*?)複数の値を取得しません。

4

2 に答える 2

3

一般に、フォーマットが明確であるようには見えません。たとえば、にマップしてマップするか、にマップするA=B,C=Dかのいずれかを意味する可能性がありますが、適切な概算として、次のように記述できます。ABCDAB,C=D

my @output = split /,(?=\w+=)/, $input;

$inputこれはコンマ( )で分割され,、コンマの後に1つ以上の「単語文字」(\w—文字、数字、アンダースコア)と等号が続く必要があるという制限が追加されます。(これは先読みアサーションと呼ばれます。)

于 2013-02-06T16:52:54.363 に答える
0

この正規表現と一致させることができます

(?<=^|,)(?<key>.*?)=(?<value>.*?)(?=,|$)

グループ名で値にアクセスできるようになりました

于 2013-02-06T16:51:24.383 に答える