|
|
|
| приветствую!
у меня проблемка с регулярным выражением... вроде бы посмотрел как в учебнике менялась дата с английского стиля на обычный русский и хотел применить к числам но ничего не вышло... не понимаю механизма замены
делаю примерно так
$line = ' 1 16 - ';
$line = preg_replace("/(\d+) (\d+) (\w+) /i", "\${1} \$3", $line);
echo $line;
|
не понимаю значения \${1} \$3
с этого наверное и все проблемы вроде бы с простой задачей...
заранее огромное спасибо! | |
|
|
|
|
|
|
|
для: eclipse
(30.05.2009 в 12:12)
| | $1 - это содержимое первых круглых скобок, $2 - вторых, $3 - третьих и т.д. Вместо них можно использовать \\1, \\2, \\3 и т.д. | |
|
|
|
|
|
|
|
для: cheops
(30.05.2009 в 13:41)
| | пишу вот так...
<?
$line = ' 1 16 - ';
$line = preg_replace("/(\d+) (\d+) (\w+) /i", "|\\1 \\3 \\2|", $line);
echo $line;
?>
|
и выражение не срабатывает... укажите пожалуйста на мою ошибку... хочется окончательно разобраться с подобными выражениями...
заранее огромное спасибо! | |
|
|
|
|
автор: AcidTrash(кафе) (01.06.2009 в 11:09) |
|
|
для: eclipse
(01.06.2009 в 10:33)
| | (\w+) с чего вы решили, что это должно работать?
(\w+) - это любой символ, образующий "слово".
Но у вас символ "-" ну ни как не образует слово.
Возможно подойдет такое решение
$line = preg_replace("/(\d+) (\d+) ([^\d]+) /i", "\\1 \\3 \\2", $line);
|
| |
|
|
|
|
|
|
|
для: AcidTrash(кафе)
(01.06.2009 в 11:09)
| | супер =) спасибо!
получается ([^\d]+) является символом??? или нет??? | |
|
|
|
|
автор: AcidTrash(кафе) (01.06.2009 в 11:29) |
|
|
для: eclipse
(01.06.2009 в 11:21)
| | получается ([^\d]+) является символом??? или нет???
Нет, эта запись означает любые символы не являющиеся цифрой(числом). | |
|
|
|
|
|
|
|
для: AcidTrash(кафе)
(01.06.2009 в 11:29)
| | теперь все ясно спасибо... и вот ещё надеюсь последний вопрос
если строка имеет такой вид $line = '\900'; использую следующий код
$line = '\900';
$line = preg_replace("|\(\d+)|i", "$\\1", $line);
echo $line;
|
и похоже не правильно описываю символ "\"
в чем ошибка??? | |
|
|
|
|
автор: AcidTrash(кафе) (01.06.2009 в 12:10) |
|
|
для: eclipse
(01.06.2009 в 11:47)
| | и похоже не правильно описываю символ "\"
"\" - это спец-символ и его надо экранировать:
$line = preg_replace("|\\\(\d+)|i", "$\\1", $line);
|
| |
|
|
|
|
|
|
|
для: AcidTrash(кафе)
(01.06.2009 в 12:10)
| | ясна! спасибо огромное!
делал просто экранирование как всегда \\
забыл что слэш по-другому экранируется
надеюсь мелких вопросов больше не возникнет
спасибо! | |
|
|
|
|
|
|
|
для: AcidTrash(кафе)
(01.06.2009 в 12:10)
| | >"\" - это спец-символ и его надо экранировать:
>
$line = preg_replace("|\\\(\d+)|i", ...
|
Какое-то подозрительно нечетное количество слэшей.... | |
|
|
|
|
|
|
|
для: Trianon
(01.06.2009 в 13:24)
| | Какое-то подозрительно нечетное количество слэшей....
Хм. В чем подозрительность? Нужный обратный слэш экранируется двумя обратными слэшами. | |
|
|
|
|
|
|
|
для: AcidTrash
(01.06.2009 в 22:36)
| | Я не говорю, что работать не будет. Просто читать эту последовательность крайне тяжело.
Один братный слэш экранируется одним обратным слэшем. Два - двумя. А у Вас - смесь. | |
|
|
|
|
|
|
|
для: Trianon
(01.06.2009 в 22:49)
| | Один братный слэш экранируется одним обратным слэшем
По Perl-совместимым регулярным выражениям , правильно двумя.
Очень странно, что
$line = preg_replace("|\\(\d+)|i", "$\\1", $line);
|
у вас работает. У меня в данном случае выдает ошибку. | |
|
|
|
|
|
|
|
для: AcidTrash
(01.06.2009 в 23:04)
| | >Один братный слэш экранируется одним обратным слэшем
>По Perl-совместимым регулярным выражениям , правильно двумя.
При чем тут перл, когда синтаксис строк - php?
>Очень странно, что
>
$line = preg_replace("|\\(\d+)|i", "$\\1", $line);
|
>у вас работает. У меня в данном случае выдает ошибку.
Я такого не говорил.
С моей точки зрения, корректное выражение звучит так:
$line = preg_replace("|\\\\(\\d+)|i",
|
допустимое - так:
$line = preg_replace("|\\\\(\d+)|i",
|
| |
|
|
|