这个正则表达式意味着什么?

时间:2010-02-09 22:03:13

标签: regex xsd

这种常规表达是什么意思。它在我正在使用的XML模式中:

([!-~]|[ ])*[!-~]([!-~]|[ ])*

-Dave

5 个答案:

答案 0 :(得分:3)

参与部分。这是第一部分:

([!-~]|[ ])*

这意味着!~之间的任意数字(*)(包括!~;这就是所有可打印的ASCII字符,如果您在an ASCII table)或空格中查找!~

这是第二部分:

[!-~]

这意味着!~之间的一个字符

这是最后一部分:

([!-~]|[ ])*

这意味着与第一部分相同。

所以这个正则表达式将匹配任何可打印的ASCII字符串,包括空格,前提是字符串中至少有一个可打印的ASCII字符。

答案 1 :(得分:2)

你得到的答案似乎错过了RE的一个基本原则:方括号内的' - '不是指文字' - ',除非它是第一个或最后一个字符。相反,' - '定义范围。 '!'是(ASCII,ISO 8859等)字符代码33 - 第一个“可见”可打印字符。同样,在ASCII中,'〜'是代码126,即最后一个可打印字符。

因此,“[! - 〜]”匹配单个可打印(ASCII)字符。

对于其他人来说,其他答案似乎是合理的。

编辑:看起来就像我写这篇文章一样,发布了一些更准确的答案 - 如果我冒犯别人,我会道歉。当我开始写这篇文章时,已发布的答案在这一点上是错误的。

答案 2 :(得分:1)

[!-~]匹配“!”之间的任何字符和“〜”(表示的字符理论上取决于使用的编码)

[ ]匹配空格字符

(x|y)匹配x或y中的一个

(x)*匹配任意数量的x后续出现(包括无)。

答案 3 :(得分:1)

范围内的任何字符!到〜或空格,然后是范围的一个字符!到〜,再次跟随任意数量的相同范围或空格。所以它看起来像是:

([!-~ ])*[!-~]([!-~ ])*

答案 4 :(得分:1)

正则表达式包括:

  • ([!-~]|[ ])*以从!(0x21)到~(0x7E)或空格字符(0x20)的范围内的零个或多个字符开头,所以基本上所有可打印的字符都来自0x21到0x7E加上空格字符
  • [!-~]后跟一个可打印的字符
  • ([!-~]|[ ])*后跟零个或多个可打印字符或空格字符

所以它基本上说字符串必须只包含可打印字符或空格字符,并且必须至少有一个可打印字符。