懒惰的正则表达式运算符在bash中不起作用

tex*_*ood 3 regex bash expr

echo "$(expr "title: Purple Haze       artist: Jimi Hendrix" : 'title:\s*\(.*\?\)\s*artist.*' )"
Run Code Online (Sandbox Code Playgroud)

版画

Purple Haze             
Run Code Online (Sandbox Code Playgroud)

使用尾随空格,即使我使用的是?懒惰运算符.

我在https://regex101.com/上测试了这个,它按预期工作,bash有什么不同?

Gil*_*il' 6

您正在使用bash的正则表达式匹配expr.expr它没有" ?惰性运算符",它只实现了基本的正则表达式(在Linux版本中有一些扩展,例如\s对于空格,但不包括类似Perl的惰性运算符).(就此而言,bash也没有.)

如果您不想.*包含尾随空格,请指定它必须以不是空格的字符结尾:

'title:\s*\(.*\S\)\s*artist.*'
Run Code Online (Sandbox Code Playgroud)