在正则表达式中,禁用双短划线

时间:2012-09-17 13:51:48

标签: regex

我有这个RegExp:

^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)([a-zA-Z]|)(\:|)[^\x00-\x1f\'\?\-\*\:\"\;\|\/]+$

这不允许带有单个破折号的文件名。但我不想只允许双破折号(文件名/文件夹中的任何位置),单个短划线应该没问题。

感谢您的任何信息。

1 个答案:

答案 0 :(得分:1)

将最后的[^\x00-\x1f\'\?\-\*\:\"\;\|\/]+更改为一个表达式,该表达式允许使用此字符类,可选地后跟一个破折号,后跟此字符类,重复任意次。如果您愿意,还可以添加可选的前导和尾随短划线。 (我在这里添加了它们,因为它比解释更容易: - )

^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)([a-zA-Z]|)(\:|)-?[^\x00-\x1f\'\?\-\*\:\"\;\|\/]+(-[^\x00-\x1f\'\?\-\*\:\"\;\|\/]+)*-?$

我至少需要一个非破折号字符;如果你想允许一个短划线,那么第一个非可选组可以包含它,但是尾随上下文必须看起来不同。

我会使用非捕获组,但你不知道你正在使用哪种正则表达式,所以也许你没有它们。