【问题标题】:How to check whether a string has at least one alphabetic character?如何检查一个字符串是否至少有一个字母字符?
【发布时间】:2013-01-02 23:34:36
【问题描述】:

我想检查一个字符串是否至少有一个 字母字符? 一个正则表达式可能是:

"^.*[a-zA-Z].*$"

但是,我想判断一个字符串是否至少有一个 字母字符? 所以我想用,比如

 if [ it contains at least one alphabetic character];then
 ...
 else
 ...
 fi

所以我不知道如何使用正则表达式

我试过了

if [ "$x"=~[a-zA-Z]+ ];then echo "yes"; else echo "no" ;fi
or
if [ "$x"=~"^.*[a-zA-Z].*$" ];then echo "yes"; else echo "no" ;fi

用x="1234"测试,上面的脚本输出结果都是"yes",所以是错误的

如何实现我的目标?谢谢!

【问题讨论】:

  • 我想你在找this
  • 有两个问题:需要使用[[]]而不是[];并且您需要在 =~ 运算符周围留有空格,否则 bash 会将其视为单个长字符串的一部分。
  • @Anders Johansson,你说得对,现在可以了,但是为什么我需要双 [],你能解释一下吗?谢谢!
  • @user1944267,[ 内置函数(参见 man [)远不如 [[(参见 man bash;例如 [[ 支持更多运算符和自然构造,如 @987654335 @ 和 || 具有它们通常的含义,而 [ 需要 -a-o 带有显式括号才能获得相同的结果)。 =~ 运算符仅存在于 [[ 中。

标签: regex linux bash shell


【解决方案1】:

试试这个:

 #!/bin/bash

x="1234"
y="a1234"

if [[ "$x" =~ [A-Za-z] ]]; then
        echo "$x has one alphabet"
fi

if [[ "$y" =~ [A-Za-z] ]]; then
        echo "Y is $y and has at least one alphabet"
fi

【讨论】:

  • 我删除了 0-9,因为我只检查字母字符。但输出不如预期
  • @user1944267,这个解决方案应该可以工作,并且是可取的,因为它可以在 bash 中工作,而不是调用单独的工具。如果输出不符合预期,请发布您的输入数据和预期输出,以便我们提供帮助。 (@abhi.gupta200297,不需要+)。
  • 其实这样不行,bash中的正则表达式需要使用[[]]
  • 好的,我编辑了代码以获得更好的示例。 @Anders 感谢您的指出。我更正了正则表达式的括号。
  • @user1944267 我认为你的问题是令牌之间没有空格。
【解决方案2】:

如果你想要便携,我会打电话给/usr/bin/grep[A-Za-z]

【讨论】:

    【解决方案3】:

    使用符合您的语言环境的 [:alpha:] 字符类和正则表达式

    [[ $str =~ [[:alpha:]] ]] && echo has alphabetic char
    

    或全局样式的模式

    [[ $str == *[[:alpha:]]* ]] && echo has alphabetic char
    

    【讨论】:

      【解决方案4】:

      sh 脚本中,在 if 子句中使用 grep 是很常见的。您可以在 /etc/rc.d/ 中找到许多这样的示例。

      if echo $theinputstring | grep -q '[a-zA-Z]' ; then
          echo yes
      else
          echo no
      fi
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-13
        • 2019-12-29
        • 2012-12-26
        • 2016-07-20
        • 2017-04-14
        • 2012-03-24
        • 2017-03-13
        • 1970-01-01
        相关资源
        最近更新 更多