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

前端之家收集整理的这篇文章主要介绍了正则表达式 – 为什么POSIX“可打印字符”类与简单字符串不匹配?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我编写了以下脚本来测试“可打印字符”字符类,如 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模式和正则表达式之间存在其他差异).

猜你在找的正则表达式相关文章