Regex Bash正则表达式展望
我正在尝试修剪一个字符串,以从开始删除所有内容,直到找到最后一个[dit]。 因此,我使用以下代码: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
_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]
现在我忍不住想弄明白这个问题。
谢谢你的帮助
CassidyBash使用的是扩展正则表达式,而不是与Perl兼容的正则表达式,因此不支持前瞻。如果要在最后一次[dit]之前删除所有内容,为什么要使用如此复杂的字符类?对于包含换行符的点或更简单的字符类,您可以使用一个简单的事实,即默认情况下,量词贪婪地到达最后一个[dit],而无需测试之后会发生什么。如果要从字符串中去掉前缀,请使用myval=${myval*\[dit]}。如果要保留最后一个[dit],只将其放回结果中比避免删除它更容易:myval=${myval*\[dit]}[dit]。