2011-12-09 15 views
0

私は、任意の通常のENVは、私はちょうど私の場合は=を使用することもできましたVAR(付加価値再販業者)のためのように、いくつかの環境変数が正規表現の列に別の環境変数に

私は(正規表現のみを使用して)の列に分割したい持っているI LS_COLORSという名前のvarを持っています(下を参照)。そのような場合に、正規表現を使用してenv変数を別々の列に分割するにはどうすればよいですか?

USER=idptest1 
GROUP=support 
HOST=beetle 
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35: 
G_BROKEN_FILENAMES=1 

(?<=^[\w]+)=のようなものを使用することはできませんか? ^[\w]+=を使用すると、値の部分から取り上げられないname=(名前部分のみ)が選択されます。

hereをチェックすると、1行目に=のすべての出現が強調表示されている場合は、作業が完了します。おかげでシンプルなものなどで

+0

は「唯一の正規表現」を定義して追加します。あなたは何らかの種類の分割機能を使用しているようです。それがうまくいくなら別のものを使うのはなぜですか?どの言語/ツールを使用していますか? – Qtax

+0

@ Qtax:私はhttp://regexr.com/?2ve9rを強調表示する必要があると仮定します。私はjava btwを使用しています。 – abi1964

+0

@ Qtax:主に私は、パターン '[\ w]'の代わりに '(?<=^[\ w] +)='のような正のlookbehindを使用したいと思っています。このようなパターンを与えるために '(?<=^[\ w] +)='それは可能ですか? – abi1964

答えて

1

スタート:

^(.*?)=(.*)$ 

は、これが最初の「=」末端までの後のすべてをキャプチャするために、変数名とし、貪欲なキャプチャグループをキャプチャするために非貪欲キャプチャグループを持っています行の値を値として返します。あなたはを処分するに空白がある場合は

その後、

^\s*(.*?)\s*=\s*(.*?)\s*$ 
+0

regexはすべての行を選択しますが、私は '= 'の最初の出現を選択したいだけです – abi1964

+0

恐らく正規表現の実装では、あなたの質問からは分かりませんが私がたくさん使うJavaとScalaでは、デフォルトはラインベースのマッチングで、入力全体をマッチさせることができます。これはJavaでDOTALLモードと呼ばれ、(?s)でインラインで有効にすることができます。私はあなたが念頭に置いている実装のための同等のフラグがあると確信しています。 –

関連する問題