【问题标题】:add a special symbol to character class alnum向字符类 alnum 添加特殊符号
【发布时间】:2016-07-21 14:15:52
【问题描述】:

我可以在角色类中添加一些东西吗?

我们都知道

              [:alnum:] 

包含所有字母数字字符!

所以我想在类中添加一个特殊符号 (.) 点!! 我们该怎么做?

我试过了,

       class='\.*[:alnum:]'
       newclass="[$class]"

将类 alnum 和点存储到变量字符串 newclass 中,然后在 awk 中使用 $newclass 但没有运气

【问题讨论】:

    标签: regex shell awk special-characters


    【解决方案1】:

    您可以包含任何字符,例如:

    [.[:alnum:]]
    

    在 BASH 正则表达式中测试:

    [[ 'abc.123' =~ ^[.[:alnum:]]+$ ]] && echo "ok" || echo "no"
    ok
    
    [[ 'abc.123' =~ ^[[:alnum:]]+$ ]] && echo "ok" || echo "no"
    no
    

    【讨论】:

    • 我怎么能否定 [.[:alnum:]]
    • awk 'length()15 || /^[.[:alnum:]]+$/' temp.csv
    • 对于否定,您可以使用:[^.[:alnum:]] 另外我无法测试您的 awk 命令,因为您没有提供来自 temp.csv 的示例数据
    • 我想打印所有长度小于 3 或大于 15 且没有点或不是字母数字的行!!
    【解决方案2】:

    Can i add something to a character class ? - 不,你不能。

    话虽如此,字符类(例如[:alnum:])通常在括号表达式(例如[[:alnum:]])中使用,您可以拥有多个字符类和/或字符列表和/或字符括号表达式中的范围,例如:

    [[:alnum:].]
    

    或:

    [[:alnum:][:space:][:cntrl:]#-&@]
    

    在使用正则表达式时,了解以下术语和区别非常重要:

    bracket expressions
    character classes
    character lists
    character ranges
    

    【讨论】:

    • 您还可以强调该术语指的是 POSIX 正则表达式。
    • 我不熟悉非 POSIX 正则表达式的不同术语 - 你能详细说明一下吗?
    • regular-expressions.info 存在一种术语冲突,其中 字符类(在 NFA 正则表达式中)= 括号表达式(在 POSIX正则表达式)。
    • 是的,我之前曾看到该网站使用不同的术语,发现他们使用术语“字符类”来表示括号表达式和字符类,这非常令人困惑。我以为这只是一个由不知道自己在说什么的人编写的网站。
    • 他们在某些地方会这样说,但不是全部。他们还谈论\d 意思是[0-9] 等,好像这是普遍的(不是),然后他们说Shorthand character classes can be used both inside and outside the square brackets. \s\d matches a whitespace character followed by a digit. [\s\d] 之类的东西,而这通常不是真的,这是他们使用术语character class 的明显案例表示他们在其他地方称为POSIX character class 的意思,而他们使用inside the square brackets 表示他们以前所说的character class 等。恕我直言,这真是一团糟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多