Tutoriales de informática - Abrirllave.com

Abrirllave.com

Ejercicio de XSD - Escribir expresiones regulares

En las expresiones regulares se pueden utilizar –entre otros– los siguientes símbolos:

Símbolos Significado

.

Cualquier carácter.

\d

Cualquier dígito del 0 al 9.

\D

Cualquier carácter que no sea un dígito del 0 al 9.

x*

x puede aparecer cero o más veces.

x+

x debe aparecer al menos una vez.

x?

x puede aparecer una vez o no aparecer.

[abc] o [a|b|c]

Cualquier carácter indicado entre los corchetes: a, b o c.

[a-z]

Cualquier carácter de la a a la z.

x{n}

x debe aparecer n veces.

x{n,m}

x debe aparecer entre n y m veces.

x{n,}

x debe aparecer al menos n veces.

Teniendo en cuenta, solamente, los símbolos mostrados en la tabla anterior, escribir las posibles expresiones regulares que permitan representar los siguientes valores:

1)

"Capítulo 0", "Capítulo 1", "Capítulo 2"... "Capítulo 9". (Solo se permite un dígito).

2)

"Capítulo 0", "Capítulo 1", "Capítulo 2"... "Capítulo 99". (Uno o dos dígitos).

3)

"Capítulo 1", "Capítulo 2", "Capítulo 3"... "Capítulo 99". (No se permite "Capítulo 0").

4)

"Capítulo 0", "Capítulo 1", "Capítulo 2"... "Capítulo 99"... "Capítulo 100"... (Uno o más dígitos).

5)

Cualquier valor de dos caracteres, cuyo primer carácter sea distinto de un dígito (0-9) y cuyo segundo carácter sea "Z": "aZ"... "zZ", "AZ"... "ZZ", "?Z", "=Z", "*Z"...

6)

"ABBC", "ABBBC", "ABBBBC", "ABBBBBC".

7)

El primer carácter debe ser "R". A continuación, deben aparecer obligatoriamente dos o más "S". Finalmente, puede aparecer o no, un dígito del 3 al 8: "RSS", "RSSS"... "RSS3"... "RSS8", "RSSS3"... "RSSS8"... "RSSSSSSSSSSS7"...

8)

Cualquier valor que contenga en primer lugar "COD", después tres dígitos (0-9) y, finalmente, uno o más caracteres cualesquiera: "COD645pera", "COD646manzana"...

Solución:

1)

Capítulo \d

Capítulo [0-9]

Capítulo [0|1|2|3|4|5|6|7|8|9]

2)

Capítulo \d\d?

Capítulo \d{1,2}

Capítulo [0-9][0-9]?

Capítulo [0|1|2|3|4|5|6|7|8|9][0|1|2|3|4|5|6|7|8|9]?

3)

Capítulo [1-9]\d?

Capítulo [1-9][0-9]?

Capítulo [1|2|3|4|5|6|7|8|9][0|1|2|3|4|5|6|7|8|9]?

4)

Capítulo \d+

Capítulo \d\d*

Capítulo [0-9]+

Capítulo [0|1|2|3|4|5|6|7|8|9]+

5)

\DZ

\D[Z]

6)

AB{2,5}C

ABBB?B?B?C

7)

RSS+[3-8]?

RSSS*[3-8]?

RS{2,}[3-8]?

RSS+[3|4|5|6|7|8]?

8)

COD\d{3}.+

COD\d\d\d.+

COD[0-9][0-9][0-9].+

Ampliación del ejercicio

Dado el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<expresiones-regulares xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="expresiones-regulares.xsd">
   <expresiones>
      <expresion1>Capítulo 0</expresion1>
      <expresion2>Capítulo 0</expresion2>
      <expresion3>Capítulo 1</expresion3>
      <expresion4>Capítulo 0</expresion4>
      <expresion5>aZ</expresion5>
      <expresion6>ABBC</expresion6>
      <expresion7>RSS</expresion7>
      <expresion8>COD645pera</expresion8>
   </expresiones>
   <expresiones>
      <expresion1>Capítulo 9</expresion1>
      <expresion2>Capítulo 99</expresion2>
      <expresion3>Capítulo 99</expresion3>
      <expresion4>Capítulo 99999</expresion4>
      <expresion5>?Z</expresion5>
      <expresion6>ABBBBBC</expresion6>
      <expresion7>RSSSSSSSSSSS7</expresion7>
      <expresion8>COD646manzana</expresion8>
   </expresiones>
</expresiones-regulares>

Escribir el contenido del archivo "expresiones-regulares.xsd" que permita validarlo utilizando las expresiones regulares escritas en este ejercicio.

Solución:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="expresiones-regulares">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="expresiones" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>

              <xs:element name="expresion1">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="Capítulo \d"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion2">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="Capítulo \d\d?"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion3">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="Capítulo [1-9]\d?"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion4">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="Capítulo \d+"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion5">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="\DZ"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion6">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="AB{2,5}C"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion7">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="RSS+[3-8]?"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element name="expresion8">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="COD\d{3}.+"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>