Что за регулярное выражение для этого? - PullRequest
1 голос
/ 04 августа 2011

Я пытаюсь выучить регулярные выражения, потому что я не могу обойтись без них.

Итак, это список различных размерных моделей (для продуктов на продажу):

  • 40x30x75
  • 46x38x23-27
  • Ø30H30
  • Ø25-18H27

Итак, какой шаблон использовать для поиска каждого вида измерений?

Например, сейчас я использую это, чтобы найти шаблон 40x30x75, но он не работает:

if(preg_match("#^[0-9][x][0-9][x][0-9]#", $dimension))
   echo "ok"

Не могли бы вы мне помочь?

Ответы [ 4 ]

1 голос
/ 04 августа 2011

Попробуйте следующее регулярное выражение:

(^[0-9]+x[0-9]+x[0-9]+$)|(^[0-9]+x[0-9]+x[0-9]+-[0-9]+$)|(^Ø[0-9]+H[0-9]+$)|(^Ø[0-9]+-[0-9]+H[0-9]+$)

Итак:

if (preg_match("/(^[0-9]+x[0-9]+x[0-9]+$)|(^[0-9]+x[0-9]+x[0-9]+-[0-9]+$)|(^Ø[0-9]+H[0-9]+$)|(^Ø[0-9]+-[0-9]+H[0-9]+$)/", $dimension))
   echo "ok";

Возможно, это можно упростить еще больше, возможно, кто-то захочет попробовать?

Кстати, знаете ли вы о веб-сайте RegExr , который позволяет вам проверять ваши регулярные выражения, это было очень полезно для меня всякий раз, когда я работаю с регулярными выражениями.

1 голос
/ 04 августа 2011

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

if(preg_match("#^[0-9]+x[0-9]+x[0-9]+#", $dimension))
   echo "ok"

По умолчанию он ищет только одного персонажа в классе. Отдельные символы не нуждаются в классе символов (хотя это не так). См. x в приведенном выше примере.

1 голос
/ 04 августа 2011

Ваше регулярное выражение должно быть:

^[0-9]{2}x[0-9]{2}x[0-9]{2}$

[0-9] означает один символ от 0 до 9. Итак, вам нужно иметь два таких символа или использовать квантификатор типа {2}. Вместо [0-9] вы также можете использовать \d, что означает любую цифру. Так, например, вы можете написать:

^\d\dx\d\dx\d\d$

Подсказка: Если вы не можете обойтись без регулярных выражений, хотите выучить его и жить легче, я могу порекомендовать вам получить RegexBuddy . Купил его для себя, когда только начал, и он мне очень помог .

0 голосов
/ 04 августа 2011

Это подтвердит первые два:

^[0-9]+x[0-9]+x[0-9]+-?[0-9]*$
...