理解正则表达式 [\s\S-[<>]]*

7
我有一个正则表达式:[\s\S-[<>]]* 请问您能帮我理解这个表达式的含义吗?从我的理解来看,它表示由空格和非空格字符的范围,以及<和>之外的所有字符所组成的字符类?
但是这个表达式很难理解。
谢谢!

这是针对Java的,适用于XSD验证器模式:<xsd:pattern value="[\s\S-[<>]]*" />。 - Dan L.
1个回答

11
这是一种只被少数正则表达式引擎支持的变体(如.NET、JGSoft、XML Schema和XPath,但例如本机Java正则表达式不支持),它被称为字符类减法
例如,
[A-Z-[EFG]]

匹配从 AZ 的任何字母,但不包括 EFG

但在你的情况下,这并没有太多意义,因为 [\s\S] 匹配任何字符 - 任何正则表达式引擎都可以实现相同的结果。

[^<>]*

谢谢!但是如果我写[A\S-[<>]],这是否意味着:“字符A或任何非空格字符,但不包括<>”? - Dan L.
甚至更简单的是,[\S-[<>]] 是否意味着所有非空格字符但不包括 <>? - Dan L.
@leadgy:是的,但你总可以用不同的方式来写它,例如[^\s<>] - Tim Pietzcker
此答案已添加到Stack Overflow正则表达式FAQ,位于“字符类”。 - aliteralmind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接