这种常规表达是什么意思。它在我正在使用的XML模式中:
([!-~]|[ ])*[!-~]([!-~]|[ ])*
-Dave
答案 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加上空格字符[!-~]
后跟一个可打印的字符([!-~]|[ ])*
后跟零个或多个可打印字符或空格字符所以它基本上说字符串必须只包含可打印字符或空格字符,并且必须至少有一个可打印字符。