我想写一个reg表达式,它不应该使用除(/,\, - ,[,],<,>,$,〜,!,@,#,:,%)之外的特殊符号。所以我试试:
if { [regexp {^[\w/-\[\]<>$#~!@#%:\\\/]+$} $name] != 1 } {
puts "Handle error";
}
但这不起作用。
例如,对于此类名称IO1??
,它不会被视为错误
有人可以帮忙吗?
答案 0 :(得分:4)
您必须转义角色类中的-
或将其放在开头 - 否则将其解释为范围:
regexp {^[\w/\-\[\]<>$#~!@#%:\\\/]+$} $name
或
regexp {^[-\w/\[\]<>$#~!@#%:\\\/]+$} $name
/
和\[
之间的范围似乎包含?
。
答案 1 :(得分:2)
我假设你想要两种类型的斜杠/
和\
。您可以尝试^[\w\\\/]+$
我尝试了一些examples here。
你很亲密,但似乎你只是处理/
。你在逃避它时是正确的(需要\/
)。如果您添加额外的\\
,则还允许\
。
如果这不起作用,请提供一些您正在使用的传递/失败的复杂字符串的示例,以便我们可以帮助改进正则表达式。
注意:这个答案是关于OP的数字,字母,下划线和斜杠。