RegEx - 贪婪的白色空间匹配

vlo*_*che 12 regex

我试图确定正确的RegEx语法来执行以下操作.我在一个文件中有一行,我希望在第一次出现空格之前匹配每个字符.

例如在行中:

123abc xyz foo bar

我不清楚为什么以下:

^.*\s
Run Code Online (Sandbox Code Playgroud)

匹配单词栏中的b:

123abc xyz foo

在我看来,\ s是贪婪的,但我不确定我怎么能让它不贪婪,只是匹配123abc我尝试了各种形式的这个正则表达式,试图使它不贪婪^.*\s?或类似的东西,但是我没有成功.先感谢您

Igo*_*bin 20

那是因为.可以是任何角色,包括空间.你可以试试

^[^ ]*\s
Run Code Online (Sandbox Code Playgroud)

要么

^\S*\s
Run Code Online (Sandbox Code Playgroud)

代替.

这是一个贪婪的回复.但你也可以非贪婪:

^.*?\s
Run Code Online (Sandbox Code Playgroud)

你错了是你放?错了地方.

例子:

$ 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 
Run Code Online (Sandbox Code Playgroud)

用perl进行非贪心搜索:

$ perl -ne 'print "$1\n" if /^(.*?)\s/' re.txt
aaaa
Run Code Online (Sandbox Code Playgroud)