【问题标题】:regex - to check if input is number in csh(unix)正则表达式 - 检查输入是否是 csh(unix) 中的数字
【发布时间】:2014-10-20 02:25:48
【问题描述】:

请帮忙。如何使正则表达式在 if 条件下工作, 检查用户输入(在第二个参数中)必须不等于任何数字?

set regex="^[0-9]+$"
if ($#argv == 2 && $2 != $regex) then
# do this

【问题讨论】:

  • 试试这个if [ $#argv == 2 && ! $2 =~ $regex ]
  • 嗨,我试过了,但现在出现“variable syntax”错误。
  • ... && ! $2 =~ "$regex" ] ... ? (请注意您的 regex 变量周围的 dbl 引号。对不起,但我没有办法对此进行测试)。祝你好运。
  • 你们正在尝试使用 Bash 语法。

标签: regex unix if-statement csh


【解决方案1】:

基于 grep 的解决方案,仅适用于非负整数

#!/bin/csh

# Note this requires 2 command line arguments, and checks the second one
# cshell arguments are 0-indexed.
if ($#argv == 2) then

    # Note the different grep regexp syntax, and you must use single quotes
    set test = `echo $2 | grep '^[0-9]*$'`
    if (($test) || ($test == 0)) then
        echo "Bad input"
    else
        echo "Ok!"
    endif
endif

【讨论】:

  • 嗨,这很好用!但是,它不会包含 0。知道为什么吗?但是如果我输入^[-0-9]*$ 它包含负数,但仍然不是0。这是现在唯一的问题,但谢谢!如果你知道解决方案,请帮助我谢谢!
  • 它不会包含 0,因为 0 在片段 if ($test) 中的计算结果为“False”。
  • 我所做的是将 -c 选项放入 grep 中,并保留其余代码,它似乎可以正常工作。了解到 -c 是 count, idk 但是你认为使用 -c 选项安全吗?像这样:设置测试=echo $2 | grep -c '^[0-9]*$'
  • 对我来说看起来很安全。请记住,我的解决方案和您的“-c”想法都不会匹配小数。为此,您需要一个更复杂的正则表达式。
  • 没关系,不包括小数。谢谢!! :)
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
相关资源
最近更新 更多