2013-04-03 2 views
-1

Я не очень хорошо с регулярными выражениями, может кто-то помочь мне с регулярным выражением с этими спецификациями:Regex Количество Диапазон нескольких диапазонов

Любое целое число между 0-365 или 888

+1

Regex является неправильным инструментом для этого. – SLaks

+0

Знаете ли вы, что разные языки интерпретируют регулярное выражение по-разному? Какой язык вы используете. Будьте конкретны – hop

+0

@SLaks Очень верно !! – hop

ответ

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"/> 
+0

Очень хорошо сделано. И вы были правы предположить, что я должен был сказать целый номер. Я искал регулярное выражение, чтобы решить это, потому что перечислять 0-365, а затем запись для 888 была бы утомительной, и я пытаюсь укрепить свои навыки регулярного выражения. –

Смежные вопросы