2012-06-25 15 views
10

以下を実行するために正しいRegEx構文を決定しようとしています。私は空白が最初に出現する前にすべての文字に一致させたいファイルに行をつけています。RegEx - 欲張りの空白が一致する

^.*\s 

にBまでマッチングされます。

ので、たとえば行に次の理由

123ABC XYZ fooのバー

それは私には不明です単語バー:

123ABC XYZ fooの

\ sは、私はそれは貪欲ではないにし、ちょうど私が作るしようとする試みには、この正規表現の様々な形を試してみました123ABC一致させることができますどのようにしかし、私は確かではないよ、貪欲であるように私には見えますそれは非貪欲な^.*\s?またはこれのような何か、しかし私は失敗しました。事前にありがとう

+1

を使用しています。あなたのバージョンではポイントは欲張りです –

+0

これはまさに私が望んでいたものです - 両方に感謝 - 私が何をしていると思ったのは、空白スペース(\ s)を見つけて、 ? \ sの後に0回以上一致することを示す。私は今理解しています - ありがとうございます – vloche

答えて

16

これは、.はスペースを含む任意の文字である可能性があるためです。あなたは

^[^ ]*\s 

または

代わり
^\S*\s 

を試すことができます。

これは欲張りです。しかし、あなたはまた、非貪欲再を行うことができます。

^.*?\s 

あなたの間違いは、あなたが間違った場所に?を置いているということです。

例:Perlで

$ echo aaaa bbb cccc dddd > re.txt 
$ cat re.txt 
aaaa bbb cccc dddd 
$ egrep -o '^.*\s' re.txt 
aaaa bbb cccc 
$ egrep -o '^\S*\s' re.txt 
aaaa 
$ egrep -o '^[^ ]*\s' re.txt 
aaaa 

と非欲張り探索:

$ perl -ne 'print "$1\n" if /^(.*?)\s/' re.txt 
aaaa 
+0

このようなそれぞれの一致には、後に続く空白文字が1つだけ含まれることに注意してください –

+0

ありがとうございました - 私は最初の質問に答えました、そしてRegExに関するもう1つの答え - – vloche

+0

@vloche – ellockie

3

使用正規表現は非常に最初からすべて(*)非空白文字(\S)を意味^\S*(?=\s)

^)、それに続く空白文字(\s )が、試合には含まれていない - 。? `^ * \ S` - あなたにも含まれる空白文字(複数可)、末尾たい場合は肯定先読み(?=\s)

、これを試してみてください正規表現に^\S*\s+

関連する問題