14

次のことを実行するための正しい正規表現構文を決定しようとしています。ファイルに、最初に空白が発生する前にすべての文字を一致させたい行があります。

たとえば、次の行にあります。

123abcxyzfooバー

次の理由は私にはわかりません。

^.*\s

単語バーのbに一致しています:

123abc xyz foo

\ sは貪欲であるように見えますが、どうすれば貪欲でなく、123abcと一致させることができるかわかりません。ただし、貪欲でないものにするために、この正規表現のさまざまな形式を試しました^.*\s?。私は失敗しました。前もって感謝します

4

2 に答える 2

21

これは.、スペースを含む任意の文字にすることができるためです。あなたが試すことができます

^[^ ]*\s

また

^\S*\s

代わりは。

それは貪欲な再です。ただし、欲張りでないreを作成することもできます。

^.*?\s

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

例:

$ 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を使った欲張りでない検索:

$ perl -ne 'print "$1\n" if /^(.*?)\s/' re.txt
aaaa
于 2012-06-25T19:19:49.320 に答える
3

正規表現を使用する^\S*(?=\s)

これは、最初からすべての(*)非空白文字()を意味しますが、その後に空白文字()を続ける必要がありますが、一致には含まれません-ポジティブ先読み\S^\s(?=\s)

末尾の空白も含める場合は、正規表現を使用します^\S*\s+

于 2012-06-25T19:22:34.637 に答える