我在一个封闭的网络上(即没有连接到互联网)。
我有一个 bourne shell 脚本,它要求用户输入一个正则表达式以用于grep -P
.
一般来说,我喜欢做某种形式的输入验证。
有没有办法测试字符串变量以查看它是否是(有效的)正则表达式?
(可以将互联网上的东西复制到我的系统上,但这需要很长时间,而且是一个 PITA——因此我正在寻找本地做这件事的方法。)
我在一个封闭的网络上(即没有连接到互联网)。
我有一个 bourne shell 脚本,它要求用户输入一个正则表达式以用于grep -P
.
一般来说,我喜欢做某种形式的输入验证。
有没有办法测试字符串变量以查看它是否是(有效的)正则表达式?
(可以将互联网上的东西复制到我的系统上,但这需要很长时间,而且是一个 PITA——因此我正在寻找本地做这件事的方法。)
不,但是使用一些工具不难测试正则表达式是否编译。
例如,使用 grep:
echo | grep -P '['
- 退出代码 ,$?
将是2
,表明发生了错误(对于这个例子,grep 将打印“ grep: missing terminating ] for character class ”到 stderr - 你可以将 stderr 重定向到 /dev/null如果您只想要退出代码)。退出代码 1 表示正则表达式编译正常但与输入不匹配。
这些退出代码特定于 GNU grep。其他工具,即使它们具有这样的功能,也可能具有不同的退出代码,以及指示特定类型错误的不同方式。
请注意,这甚至远远不能告诉您正则表达式是否会正确匹配您想要的内容(而不匹配您不想要的内容)。
简而言之,尝试并测试退出代码。并了解你的工具。