Мне нужна помощь по регулярным выражениям (PHP). Поэтому у меня есть поле textarea, где пользователь может вводить заказы.Справка по регулярному выражению (php)
Например:
see north,
see south,
sell 7 wood,
see west
мне нужно регулярное выражение, которое соответствует следующим правилам:
- Каждый заказ отделен запятой, за исключением последнего одного
- Порядок является либо (см. север, см. юг, см. запад, см. восток) или (купить/продать% древесины). % - представляют число (максимум 999 и минимум 1 без головы нулей)
До сих пор я сделал это регулярное выражение:
preg_match("/(((see) (north|south|west|east))|((sell|buy) ([1-9][0-9]{0,2}) (wood)))/");
Но проблема в том, следующий вход также действует , который должен быть не: продать 75 см древесины на север (он должен быть либо продать 75 древесины ИЛИ см север)
NB! Прямо сейчас у меня нет проверки запятой в моем регулярном выражении, потому что я использую функцию PHP explode для разделения с запятыми, а затем передаю результирующие элементы массива в регулярное выражение. Но это не похоже на работу со следующим входом:
see north,
see south *(no comma between two orders)*
sell 7 wood,
see west
Итак, мне нужно одно из следующих решений:
- Регулярного выражение имеет запятую проверку (см правила)
- Я взрываюсь входная строка с функцией взрыва PHP и ограничить, что следующий ввод недействителен: продать 75 деревьев см. север
Спасибо.
Четыре ваших # 2 - используйте [якоря] (http://www.regular-expressions.info/anchors.html), например '^ (?: см. (?: north | south | west | east) | (?: sell | buy) [1-9] [0-9] {0,2} дерево) $ ' –
Вы не привязывали свой шаблон к началу и концу тестовая строка - поэтому 'see south sell 7 wood' дает положительный результат, потому что' see south' самостоятельно уже удовлетворяет первой части вашего шаблона. – CBroe
Спасибо, это сработало. Хотя, мне нужно написать некоторые модульные тесты, чтобы убедиться, что он делает то, что он должен делать. И, конечно же, я углубится в регулярные выражения. Спасибо за ответ! – Omaja7