RegEx - 贪婪的空白匹配

标签 regex

我正在尝试确定正确的 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/

相关文章:

regex - XSLT 是否提供了一种使用正则表达式来识别 xml 元素的方法?

python - 正则表达式结果为无

R - 基于正则表达式的出现有条件地匹配数据帧之间的变量值

Java Regex - 使用别名更改路径

regex - vim 将字符替换为\n

regex - Ubuntu 16 sed 不能使用括号

python - 如果出现空格而不是空格的情况,如何使用正则表达式

python - 如何在 Python 中使用递归正则表达式或其他方法来递归验证类似 BBcode 的标记?

regex - 使用捕获与非捕获正则表达式检测列表上下文中的匹配差异?

c# - 由任何非数字字符串分隔的拆分数字