Я пытаюсь идентифицировать не только «числа» в строке, но и помечать, какой это тип числа, например «Общее», «Дробь», «Процент», «Соотношение» и т. Д.
Теперь, если я использую инструментвроде http://rubular.com/, мои шаблоны работают нормально.
Правила?
([-+]?)([0-9]+)([,+]?)([.]?) //General
([-+]?[0-9.,]+[%]) //Percent
([0-9]+[\/][0-9]+(?:st|nd|rd|th)) //Fraction
([-+]?[0-9.,]+[:][-+]?[0-9.,]+) //Ratio
Строки для проверки?
1
1,000
1.000
-50.5
-1:+3
1,200.6:3.9
+2:-4
1/5th
25%
25.76%
1,001%
Это когда я помещаю их в php (if
/ elseif
) конструкции, я всегда получаю "общее" число?
if (preg_match('/([-+]?[0-9.,]+[%])/',$string)) {
echo " PERCENTILE ";
} elseif (preg_match('/([0-9]+[\/][0-9]+(?:st|nd|rd|th))/',$string)) {
echo " FRACTION ";
} elseif (preg_match('/([-+]?[0-9.,]+[:][-+]?[0-9.,]+)/',$string)) {
echo " RATIO ";
} elseif (preg_match('/([-+]?)([0-9]+)([,+]?)([.]?)/',$string)) {
echo " CARDINAL ";
} else {
echo " GENERAL ";
}
Независимо от того, что это повторяет "КАРДИНАЛ".
Да, я попытался переключить порядок (сначала Карта / Общее, затем остальные).Да, я пытался сделать их независимыми IF (), и в обратном порядке (сначала самое общее).
Кажется, ничего не работает.Даже проверка Single IF для любого из форматов просто не удалась.Либо мои правила напичканы, либо я делаю что-то явно неправильное.