Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Bash正则表达式展望_Regex_Bash - Fatal编程技术网

Regex Bash正则表达式展望

Regex Bash正则表达式展望,regex,bash,Regex,Bash,我正在尝试修剪一个字符串,以从开始删除所有内容,直到找到最后一个[dit]。 因此,我使用以下代码: _annotation="[dit] pause" re="[a-z\~\*\-[:blank:]\[\]]*\[dit\](?![a-z\*\~\-[:blank:]]*\[dit\])" if [[ $_annotation =~ $re ]]; then _annotation=${BASH_REMATCH[1]} echo "expression fou

我正在尝试修剪一个字符串,以从开始删除所有内容,直到找到最后一个[dit]。 因此,我使用以下代码:

 _annotation="[dit] pause"
 re="[a-z\~\*\-[:blank:]\[\]]*\[dit\](?![a-z\*\~\-[:blank:]]*\[dit\])"


 if [[ $_annotation =~ $re ]]; then
      _annotation=${BASH_REMATCH[1]}
      echo "expression found"
 fi
然而,前瞻性有一个问题,我无法解决。甚至

re="[a-z\~\*\-[:blank:]\[\]]*\[dit\](?!\[dit\])"
找不到表达式,尽管没有以下[dit]

现在我忍不住想弄明白这个问题。 谢谢你的帮助


Cassidy

Bash使用的是扩展正则表达式,而不是与Perl兼容的正则表达式,因此不支持前瞻。如果要在最后一次[dit]之前删除所有内容,为什么要使用如此复杂的字符类?对于包含换行符的点或更简单的字符类,您可以使用一个简单的事实,即默认情况下,量词贪婪地到达最后一个[dit],而无需测试之后会发生什么。如果要从字符串中去掉前缀,请使用myval=${myval*\[dit]}。如果要保留最后一个[dit],只将其放回结果中比避免删除它更容易:myval=${myval*\[dit]}[dit]。