我正在尝试确定正确的 RegEx 语法来执行以下操作。我在文件中有一行,我想在第一次出现空格之前匹配每个字符。
所以例如在这一行:
123abc xyz foo bar
我不清楚为什么会出现以下情况:
^.*\s
与单词栏中的 b 匹配:
123abc xyz foo
在我看来\s 是贪婪的,但是我不确定如何使它不贪婪并且只匹配 123abc 我尝试了各种形式的这个正则表达式以试图使它不贪婪
^.*\s?
或类似的东西,但是我没有成功。先感谢您
最佳答案
那是因为.
可以是任何字符,包括空格。你可以试试
^[^ ]*\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
关于RegEx - 贪婪的空白匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195830/