2014-01-15 3 views
2

Я пытаюсь сопоставить несколько разных вещей из xml-файла с использованием regex в файле xsd.Попытка сопоставить */* regex

Я пытаюсь установить точное совпадение 0 или */* и совпадение 0-9/0-9 0-9 - любые цифры 0 - 9 пример 0/4 должен совпадать, но 0/a должен показывать несоответствие/неверный ввод.

Список возможных записей.

0 
0/0 
1/4 
22/22 
*/* 

примеров не допускаются записи

1 (no digits other than 0) 
1/a 
a 

Вот регулярное выражение, которое я использую, но у него есть недостаток. Он соответствует 0 отлично, но он все еще принимает 0/a, и он не совпадает с */*.

^.*\b(0|[0-9]\s\/\s[0-9]|\*\s\/\s\*)\b.*$ 

ответ

1

Ну, что позволяет 0/a является .*, что вы используете, где первый .* не совпадает ни с чем, 0 будет соответствовать 0 и последний .* будет соответствовать / a. И я не думаю, что вам действительно нужны границы слов здесь.

Начало сопоставляя только 0:

^0$ 

Тогда разветвляются принять 0-9/0-9:

^(?:0|[0-9]/[0-9])$ 

И если вы хотите, чтобы принять несколько цифр, добавьте в кванторов. Если вы не хотите, чтобы получить такие вещи, как 09/09, а затем использовать [1-9][0-9]* вместо:

^(?:0|[1-9][0-9]*/[1-9][0-9]*)$ 

Чтобы принять 0/0, просто добавьте его с другим «или»:

^(?:0|(?:0|[1-9][0-9]*)/(?:0|[1-9][0-9]*))$ 

И, наконец, принять * , вы можете поместить его вместе с 0 в классе символов:

^(?:0|(?:[0*]|[1-9][0-9]*)/(?:[0*]|[1-9][0-9]*))$ 

regex101 demo

+0

Это работало идеально и спасибо за ссылку. Я только начал изучать регулярное выражение. Спасибо за отличное объяснение. – deathismyfriend

+0

@deathismyfriend Добро пожаловать :) – Jerry

+0

Регулярные выражения XSD всегда соответствуют всему значению (или вообще не совпадают), поэтому^и $ не используются для привязок в регулярных выражениях XSD, и нет концепции нетерпеливых или жадное соответствие. XSD-формулировка решения будет выглядеть как '(0) | (([0 *] | [1-9] [0-9] *)/([0 *] | [1-9] [0-9 ] *)) '. (Если приведенные выражения действительно работают для OP, тогда OP, возможно, ошибочно полагал, что была задействована схема XSD.) –

1

Это работает:

([\d*]+\s\/\s[\d*]+|0) 

Пример: http://regex101.com/r/fI0cS5

+0

Это соответствует, но также допускает многие предшествующие 0s. Выше сказано Джерри. Спасибо за попытку. – deathismyfriend

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