0
我有以下regexp检查XML元素名称。perl正则表达式无效范围
my $NameStartChar = ':A-Z_a-z\x{C0}-\x{D6}\x{D8}-\x{F6}\x{F8}-\x{2FF}\x{0370}-\x{037D}\x{37F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}';
my $NameChar = ':A-Z_a-z\x{C0}-\x{D6}\x{D8}-\x{F6}\x{F8}-\x{2FF}\x{370}-\x{37D}\x{37F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}\-\.0-9\x{B7}\x{0300}-\x{036F}\x{203F}-\x{2040}';
sub checkXmlName ($)
# Check if input is valid XML name
# $arg - Input string
# $ret - Boolean of validity
{
if ($_[0] =~ m/^[$NameStartChar]([$NameChar])*$/)
{ return 1; }
else
{ return ""; }
}
if (checkXmlName("foo"))
{
print STDOUT "OK";
}
其中给出便捷错误
Invalid [] range "\x{F8}-\x{2FF}" in regex; marked by <-- HERE in m/^[:A-Z_a-z\x{C0}-\x{D6}\x{D8}-\x{F6}\x{F8}-\x{2FF} <-- HERE
在我使用\N{U+2FF}
形式的字符的Perl 5.16.2。但我必须使用5.8.8。
编辑: 将qw更改为不会改变错误的qr。 并添加了Unicode character 0xeffff is illegal at ...
编辑:来自ikegami的评论 删除qr /消除回文字符错误。
另外:为什么使用'qw /.../'?这是创建列表的结构。 – mob 2013-03-11 17:21:58
所以你说你得到5.8.8错误,而不是5.16.2,你想......究竟是什么? – ikegami 2013-03-11 17:39:40
'\ x {F8} - \ x {FF} \ x {100} - \ x {2FF}'? – ikegami 2013-03-11 17:53:43