正则表达式编号范围多个范围

时间:2013-04-03 17:51:42

标签: regex xsd

我对正则表达式不是很擅长,有人可以帮助我使用这些规范的正则表达式:

0-365或888之间的任何整数

2 个答案:

答案 0 :(得分:1)

考虑到澄清,我发现这个问题非常有趣。如果考虑一个数字的词汇表示在XSD方面是什么,那么只有正则表达式可以做到这一点的合法模式。例如,要求可能是禁止前导零。

当然,对于像这样的场景,可以针对正则表达式提出更多参数;如果我们从字面上理解问题是什么,即any number然后浮动,双精度和小数(一点点)增加了复杂性。所以,让我们假设任何整个数字。

我没有花太多时间来优化模式,更专注于使其可读,但我在下面显示它(在XSD中模式是隐含的锚定开始和结束),以及其他选项测试各种实现......

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="test">
        <xsd:complexType>
            <xsd:attribute name="pattern">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:unsignedInt">
                        <xsd:pattern value="0*([1-2]*[0-9]{1,2}|3[0-4][0-9]|35[0-6]|888)"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:attribute>
            <xsd:attribute name="uint">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:unsignedInt"/>
                </xsd:simpleType>
            </xsd:attribute>
            <xsd:attribute name="other">
                <xsd:simpleType>
                    <xsd:union>
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:unsignedInt">
                                <xsd:enumeration value="888"/>
                            </xsd:restriction>
                        </xsd:simpleType>
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:unsignedInt">
                                <xsd:maxInclusive value="356"/>
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:union>
                </xsd:simpleType>
            </xsd:attribute>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

还有一些XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<test pattern="0000356" uint="0000888" other="0356"/>

答案 1 :(得分:1)

尝试以下模式:

\b([0-9]|[1-8][0-9]|9[0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-5])\b|888

您可以online对其进行测试

enter image description here