Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式检查句子中是否有特殊字符和符号_Regex_Bash_Shell_Sh - Fatal编程技术网

Regex 使用正则表达式检查句子中是否有特殊字符和符号

Regex 使用正则表达式检查句子中是否有特殊字符和符号,regex,bash,shell,sh,Regex,Bash,Shell,Sh,我想在shell脚本中使用正则表达式检查文本文件中的行中是否有特殊字符。 假设有一句话“assccñasas” 如何检查行中是否有“ñ”,因此应将其作为错误输出。 我还想检查是否有诸如“/”或“^”或“&”等符号 我的代码: VALID='^[a-zA-Z_0-9&.<>/|\-]+$' #myregex checkError(){ if [[ $line =~ $VALID ]]; then echo "tes" else e

我想在shell脚本中使用正则表达式检查文本文件中的行中是否有特殊字符。 假设有一句话“assccñasas” 如何检查行中是否有“ñ”,因此应将其作为错误输出。 我还想检查是否有诸如“/”或“^”或“&”等符号

我的代码:

VALID='^[a-zA-Z_0-9&.<>/|\-]+$' #myregex

checkError(){
    if [[ $line =~ $VALID ]]; then
       echo "tes"
    else
        echo "not okay"
       exit 1
    fi
 }

 while read line
 do 
    checkRusak      
 done < $1
VALID='^[a-zA-Z_0-9&./\-]+$”\myregex
checkError(){
如果[[$line=~$VALID]];则
回声“tes”
其他的
回声“不好”
出口1
fi
}
读行时
做
切克鲁萨克
已完成<$1
例如,如果有“StÀck Overflow”语句,那么它将输出错误。如果出现“堆栈溢出”语句,则仍然输出错误。 但如果只有“堆栈溢出”(无符号或特殊字符),它将输出“test”

到目前为止,它可以检查符号(“/”或“\”等),但在特殊字符中仍然存在问题

非常感谢您的帮助, 提前谢谢你

你也可以

  • 定义,哪些字符有效,并且只允许这些或

  • 定义哪些字符无效,并检查是否有无效字符

对于第二种方法,可以使用以下正则表达式:
[^a-zA-Z_0-9\s]

方括号内的
^
否定字符类,因此它匹配包含非字母
a-Z
a-Z
、数字、下划线或空白字符的任何字符串

因为您想要检测单个字符,所以不需要量词


您所拥有的(除了名称不匹配之外)有什么问题吗?问题是正则表达式仍然能够识别特殊字符(如上文所述)。就像这里显示的特殊字符:。像这样。但我希望程序能够检测是否有特殊字符和一些符号(不是全部),如“/”、“*”、“(”等问题是,bash regex高度依赖于系统上的区域设置定义和regex引擎的实现(是否进行排序规则扩展)。启用区域设置扩展,并且在排序规则扩展中,在区域设置中,在排序规则扩展中,定义了介于
a-z
之间的区域设置中,
[a-z]+
将匹配整个字符串
“assccñasas”
。例如,此代码
[[“assccñasas”=~([a-z]*)]]]]和&echo“${BASH_REMATCH[1]}”
在我的Cygwin安装上输出
assccñasas