14

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

所以例如在这一行:

123abc xyz 富吧

我不清楚为什么会这样:

^.*\s

与单词栏中的 b 匹配:

123abc xyz 富

在我看来 \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 回答