Разбор строки на части

Статус
В этой теме нельзя размещать новые ответы.

scvorec

Создатель
Регистрация
9 Ноя 2007
Сообщения
33
Реакции
1
Нуждаюсь в помощи по составлению регулярки на РНР.
На входе могут быть такие строки:
HTML:
1. 100
2. +100 цыпленок
3. -25.12 в какафку
4. -434р
5. \я текст
6. %$32,3
7. 100$ забухал
На выходе разбить на переменные, например так:
HTML:
1. $var1 = "100"; $var2 = ""; $var3 = "";
2. $var1 = "+100"; $var2 = ""; $var3 = "цыпленок";
3. $var1 = "-25"; $var2 = ""; $var3 = "в какафку";
4. $var1 = "-434"; $var2 = "р"; $var3 = "";
5. $var4 = "я текст";
8. $var5 = "$32,3";
9. $var1 = "100"; $var2 = "$"; $var3 = "забухал";
Т.е. отдельно разбить на число, символ после числа, и сам текст
Некоторые закономерности:
1. после числа может быть только 1 символ: Р,S,E,$ без учета регистра
2. После числа с символом должен идти пробел
3. Числа могут быть не целыми с разделителем . или ,
4. Длина числа не больше 7 символов
5. Строка может начинатся только с цифры или символов +,-,%,\
 
Твои условия немного противоречат примерам, проверь, так ли ты хочешь
 
вот кусок кода. "собирал на коленках", в деле не проверял. будут ошибки, пиши, поправим.

PHP:
// $st строка из множества строк. можно получать в цикле.

if (preg_match("/([\+\-]?[0-9\.,]{1,7})([РSE\$]?) ([^\n]*)/i", $st, $rg))
{
$var1 = $rg[1];
$var2 = $rg[2];
$var3 = $rg[3];
}
if (preg_match("/\\([^\n]*)/i", $st, $rg))
$var4 = $rg[1];
if (preg_match("/%([^\n]*)/i", $st, $rg))
$var5 = $rg[1];
 
вот кусок кода. "собирал на коленках", в деле не проверял. будут ошибки, пиши, поправим.
PHP:
// $st строка из множества строк. можно получать в цикле.
if (preg_match("/([\+\-]?[0-9\.,]{1,7})([РSE\$]?) ([^\n]*)/i", $st, $rg))
{
$var1 = $rg[1];
$var2 = $rg[2];
$var3 = $rg[3];
}
if (preg_match("/\\([^\n]*)/i", $st, $rg))
$var4 = $rg[1];
if (preg_match("/%([^\n]*)/i", $st, $rg))
$var5 = $rg[1];
Ругается на вторую регуляку, которая обрабатывает "\текст"
HTML:
Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 7
Но самый последний if обрабатывает, хоть и ругается, а два первых нет.

Первую регулярку я собрал был до вашего коммента вот так:
HTML:
([-\+]?[0-9\.,]{1,7})([РSE\$]?)(.*)$
Не знаю насколько правильно, но работало:ah:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху