2013-08-23 3 views
1

Можно ли использовать сравнение в шаблоне регулярных выражений? Я хочу проверить, является ли недавняя согласованная группа числом greater than. Это шаблон: size=(\d+), и я хочу посмотреть, если (\d+)>200, тогда верните true.Операторы сравнения в regex

+6

Это уже не регулярное выражение, это язык программирования. Итак: нет. – deceze

+0

Не так, я думаю. Но вы можете сопоставить все, что до 200. – putvande

+0

Вы можете эмулировать это с помощью чего-то вроде '([0-9] {2,} | [2-9]) [0-9] [0-9]' – SmokeyPHP

ответ

5

Вы не можете сделать это с тем же синтаксисом, но то, что вы после этого можно с более сложное выражение, как:

более 200:

([1-9]\d+|(?!200)[2-9])\d\d 

Включают 200:

([1-9]\d+|[2-9])\d\d 

Однако, если вы подходите к другим (и большим) номерам, это будет неуправляемо.

Вы бы сделали все, чтобы соответствовать всем номерам, а затем проведите по ним, чтобы выполнить проверку > 200, и удалите те, которые не соответствуют.

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

О.П. упоминается в комментариях, что они хотели бы, чтобы соответствовать > 30*1024*1024, который > 31457280

Во имя доказав, почему регулярное выражение боли, я написал нужный шаблон:

\b((3[1-9][4-9][5-9][7-9][2-9][8-9]\d+)|(3[1-9][4-9][5-9][7-9][3-9]\d{2,})|(3[1-9][4-9][5-9][8-9]\d{3,})|(3[1-9][4-9][6-9]\d{4,})|(3[1-9][5-9]\d{5,})|(3[2-9]\d{6,})|(?!31457280)(4\d{7,}))\b 

(не очень красиво!)

+0

Матчи "0000" ... :) – deceze

+0

@deceze Исправлено. Снова: p – SmokeyPHP

+0

Он соответствует 200, должен соответствовать только 200 ...; P – deceze

0

Нет, это не возможно, цель регулярных выражений, чтобы соответствовать не как выражения программировать с ним

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