加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 为什么POSIX“可打印字符”类与简单字符串不匹配

发布时间:2020-12-14 05:56:53 所属栏目:百科 来源:网络整理
导读:我编写了以下脚本来测试“可打印字符”字符类,如 here所述. #!/bin/shcase "foo" in *[:print:]*) echo "found a printable character" ;; *) echo "found no printable characters" ;;esac 我希望这个脚本输出找到一个可打印的字符,“foo”中至少有一个(实
我编写了以下脚本来测试“可打印字符”字符类,如 here所述.

#!/bin/sh

case "foo" in
    *[:print:]*) echo "found a printable character" ;;
    *) echo "found no printable characters" ;;
esac

我希望这个脚本输出找到一个可打印的字符,“foo”中至少有一个(实际上是所有)字符是可打印的.相反,它输出“找不到可打印的字符”.为什么“foo”中的字符不被识别为可打印字符?

解决方法

字符串[:仅在括号表达式中是特殊的,括号表达式本身由[引入].所以你的榜样应该是:

case "foo" in
    *[[:print:]]*) echo "found a printable character" ;;
    *) echo "found no printable characters" ;;
esac

如果这看起来很麻烦,请考虑一下如何指定一个应该匹配小写字母或数字而不是大写字母的模式.

有关更多信息,请参阅section of the POSIX spec detailing bracket expressions in regular expressions. shell模式中的Bracket表达式与正则表达式中的括号表达式类似,但处理的除外!和^. (尽管在括号表达式的上下文之外,shell模式和正则表达式之间存在其他差异).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读