我需要匹配"?xml'这就是我想要的'?",并获得单引号之间的字符串。
我试试这个:
if [[ '?xml abc def?' =~ \?xml(.*)\? ]]; then
echo ok;
echo "${BASH_REMATCH[1]}";
fi
结果:
ok
abc def
我只想要' abc def'。所以我试试:
if [[ '?xml abc def?' =~ \?xml[:blank:]+(.*)\? ]]; then #nothing matched
if [[ '?xml abc def?' =~ \?xml\[:blank:\]+(.*)\? ]]; then #nothing matched
if [[ '?xml abc def?' =~ \?xml\s+(.*)\? ]]; then #nothing matched
如何解决此问题?帮助!
答案 0 :(得分:1)
您需要在另一个括号(字符类)中包含[:blank:]
。
$ if [[ '?xml abc def?' =~ \?xml[[:blank:]]+(.*)\? ]]; then echo ok; echo "${BASH_REMATCH[1]}"; fi
ok
abc def
答案 1 :(得分:1)
您可以使用[[:space:]]
删除所有空格:
if [[ '?xml abc def?' =~ \?xml[[:space:]]*(.*)\? ]];
^^^^^^^^^^^^
注意括号表达式(或POSIX字符类)两端的2个方括号。根据regular-expressions.info:
POSIX语法...只能在括号表达式中使用。
[x-z0-9]
是本教程称之为“字符类”的示例,以及POSIX称之为“括号表达式”的示例。
请参阅demo
[:space:]
POSIX字符类匹配[ \t\r\n\v\f]
个字符。