0

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

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

4

2 回答 2

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"/>
于 2013-04-03T20:43:41.977 回答
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

你可以在线测试

在此处输入图像描述

于 2018-07-22T11:06:12.510 回答