Простое регулярное выражение

Fotofun

Новичок
Простое регулярное выражение

Не бейте. Запутался.
Есть строчка: $text =

"<Column name="col0" type="string">металл</Column>
<Column name="col1" type="string">учетная цена</Column>
<Column name="col2" type="string">тренд</Column> "

Делаю:
PHP:
$text=ereg_replace('<Column[*]>','<td>',$text);
А оно не работает. Не меняет по маске. Я неправильно в маске * ставлю?
Извиняюсь, просто срочно надо. А к вечеру голова плохо соображает.
 

IIIEPJIOK

Новичок
PHP:
$pattern = "/<Column(.)*>/U"; $replacement = "<td>";
echo(preg_replace($pattern, $replacement, $text));
 

DiMA

php.spb.ru
Команда форума
/<Column(.)*>/U

IIIEPJIOK

1. скобки в твоем примере не нужны, достаточно .*
2. нельзя писать (.)* просто так, нужно (.*)
лишние скобки, а тем более модификатор у скобок, замедляет работу
3. т.к. завершающий тег все равно придется менять, делаем культурно в одной команде

pattern = "!<Column\s+.*?>(.*?)</Column>!is"; $replacement = "<td>\\1</td>";
echo(preg_replace($pattern, $replacement, $text));
 

IIIEPJIOK

Новичок
1. скобки в твоем примере не нужны, достаточно .*
согласен, можно без скобок

2. нельзя писать (.)* просто так, нужно (.*)
если не сложно, то обоснуй, я не спец в регулярках, не понимаю о чем ты
3. т.к. завершающий тег все равно придется менять
ну, что спросили, то и ответил :)
 

DiMA

php.spb.ru
Команда форума
если кратко, запись (.+) выполняется на порядок быстрее (+меньше памяти на порядок), чем (.)+
на мелком тексте незаметно, на большом - легко зависнет

модификатор после скобки можно использовать только в крайнем случае

просто лишние скобки - бесполезная нагрузка, по тем же причинам, функция вынуждена копировать в твоей буфер все найденные части:
(one|two) можно заменить на (?=one|two), если копирование в \\1 НЕ требуется
(хотя на такую оптимизацию можно смело забить ради читаемости)
 

Glazyrin Sergey

Новичок
$text=ereg_replace('<Column[^>]+>','<td>',$text);
Я думаю можно еще так
Так даже получше должно быть
 

DiMA

php.spb.ru
Команда форума
нет, ереги - это .авно, для решения подобных задач используй прег
ерег полезен в иных задачах и тратит на порядок больше памяти и времени (он более "добросовестно" ищет совпадения, но нам этого не надо)

к тому же рег <Column[^>]+> - не просто .овно, а унылое .овно, не способное переварить
<column title="Нажми <F5>"> и не вылавливающее </column>
 

Glazyrin Sergey

Новичок
Хм спасибо, кстати про то что в title(и в других атрибутах) может использоваться > забыл

-~{}~ 28.01.09 14:31:

И не совсем вник в задачу :)
 
Сверху