Regex 如何在没有Perl的情况下使用grep在ash中进行非贪婪解析
嗨,我正在尝试解析一个文件夹结构,并将目录中的前两个文件夹传递给一个变量。现在我使用的是正则表达式“/。?/”,除了我在OpenWRT上的ash版本不支持Perl,因此忽略了“?”。如何解决这个问题Regex 如何在没有Perl的情况下使用grep在ash中进行非贪婪解析,regex,grep,ash,Regex,Grep,Ash,嗨,我正在尝试解析一个文件夹结构,并将目录中的前两个文件夹传递给一个变量。现在我使用的是正则表达式“/。?/”,除了我在OpenWRT上的ash版本不支持Perl,因此忽略了“?”。如何解决这个问题 var2=$(echo "$TR_TORRENT_DIR" | grep -Eio '\/.*?\/.*?\/') echo $var2 让你的正则表达式更具体 一般来说,使用非贪婪修饰符是一个危险信号。它应该让你考虑是否可以用更具体的方式重写正则表达式(因此量词是否贪婪无关紧要) 在这种情况下,
var2=$(echo "$TR_TORRENT_DIR" | grep -Eio '\/.*?\/.*?\/')
echo $var2
让你的正则表达式更具体 一般来说,使用非贪婪修饰符是一个危险信号。它应该让你考虑是否可以用更具体的方式重写正则表达式(因此量词是否贪婪无关紧要) 在这种情况下,问题是
*
(另一个标志),它匹配得太多
如果使用[^/]
而不是
,则可以避免所有问题:
/[^/]*/[^/]*/
将匹配前两个组件,仅此而已。(此外,无需转义
/
;它在正则表达式中并不特殊。)谢谢。我认为非贪婪是一个危险信号,但我只是从正则表达式开始。非常感谢!