如何使用正则表达式匹配bash中特定类型的字符串

时间:2019-03-20 00:34:11

标签: regex bash

我想编写一个与所有具有字母,数字和下划线的字符匹配的脚本。 可能的有效字符串:

asd_asd
Asd_asd
asd_123
123_asd
123_aSD

,依此类推。 到目前为止,我尝试过的是:

if [[ "$LINE" =~ [a-zA-Z0-9_] ]]

但这将匹配包含以下任何字符的任何字符:!@#$%^&*()_ +} {|?> <`!,以及其他奇怪的符号。

我考虑过将特殊字符放入列表中,如果字符串包含列表中的一个字符,则忽略该字符串,但是我恐怕可以跳过一个字符。

在这种情况下最好做什么?

1 个答案:

答案 0 :(得分:5)

[a-zA-Z0-9_]仅匹配一个字符。您需要使用以下模式:

^[a-zA-Z0-9_]+$
  • ^匹配输入字符串的开头,
  • $匹配结尾,
  • [...]+匹配字符类中的一个或多个字符(上述模式中的a-zA-Z0-9_)。