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