|
|
|
| Помогите разобраться. Мне нужно извлечь текст, что написан русскими буквами(он может быть и английскими буквами написан), то есть из всего выбрать только название.
Я так делаю:
<?php
$one = "1|./index/Устройство полов.txt
1|./index/Проект и дизайн интерьера.txt
1|./index/Плиточные работы.txt
1|./index/Как узнать стоимость ремонта.txt
1|./index/Декоративно-отделочные работы.txt";
print preg_replace('#(?<=\d{1,4}|.\/index\/)([A-Za-zА-Яа-я\s-_]*)(?=\.txt\\n)#is','$2', $one);
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(02.10.2008 в 16:12)
| | >Мне нужно извлечь текст
<pre>
<?php
$one = "1|./index/Устройство полов.txt
1|./index/Проект и дизайн интерьера.txt
1|./index/Плиточные работы.txt
1|./index/Как узнать стоимость ремонта.txt
1|./index/Декоративно-отделочные работы.txt";
preg_match_all("#\d+\|\./index/(.+?).txt#i",$one,$out);
unset($out[0]);
print_r($out);
?>
|
Заменить
print preg_replace("#\d+\|\./index/(.+?).txt#i","$1",$one);
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(02.10.2008 в 16:45)
| | 1. Вот это не пойму: (.+?) - один любой символ должен встречаться один или несколько раз, а тогда "?" здесь зачем?
2. Зачем разрушать полученный массив unset($out[0]); и обязательно ли это делать? | |
|
|
|
|
|
|
|
для: Лена
(02.10.2008 в 17:06)
| | 1. Это не жадное выражение, которое дает самое короткое совпадение. В этом примере наверно будет лишним, но часто бывает полезным.
Попробуйте убрать из переменной $one все переносы строки так, чтобы вышла одна длинная строка и посмотрите результат в обоих случаях.
2. Уничтожение переменной высвобождает память. Бывает полезным для объемных скриптов. | |
|
|
|
|
|
|
|
для: Keda
(02.10.2008 в 17:23)
| | 1.
>чтобы вышла одна длинная строка
Вот поэтому он и не лишний.
Хотя дело можно было поправить модификатором U.
2. В этом вы правы.
Но в этом примере , я удалил ненужное для наглядности :) | |
|
|
|
|
|
|
|
для: AcidTrash
(02.10.2008 в 17:27)
| | >Вот поэтому он и не лишний.
Точке не соответствует символ перевода строки, если не указан модификатор s. | |
|
|
|
|
|
|
|
для: Keda
(02.10.2008 в 17:43)
| | >Точке не соответствует символ перевода строки, если не указан модификатор s.
Здесь дело не в этом. Метасимвол ? меняет жадность регулярного выражения. | |
|
|
|
|
|
|
|
для: AcidTrash
(02.10.2008 в 17:53)
| | Там, где стоит ?, переводы строк внутри массива сохраняются.
Еще вот что интересно.
Если я потом начинаю выводить каждый элемент полученного массива - foreach ($out[1] as $a) print $a;
то там, где я ставлю ?, все нормально, а вот где ? нет и я убираю внутри строки переводы
строк, строка не заменяется. Фантастика!
<?php
$one = "1|./index/Устройство полов.txt 1|./index/Проект и дизайн интерьера.txt
1|./index/Плиточные работы.txt 1|./index/Как узнать стоимость ремонта.txt
1|./index/Декоративно-отделочные работы.txt";
preg_match_all("#\d+\|\./index/(.+).txt#i",$one,$out);
unset($out[0]);
//print_r($out);
foreach ($out[1] as $a) print $a;
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(02.10.2008 в 17:59)
| | >а вот где ? нет и я убираю внутри строки переводы
>строк
Не особо понятно. В приведенном вами примере поставьте модификатор U. | |
|
|
|
|
|
|
|
для: AcidTrash
(02.10.2008 в 22:05)
| | Чтобы было понятно. Код:
<?php
$one = "1|./index/Устройство полов.txt 1|./index/Проект и дизайн интерьера.txt 1|./index/Плиточные работы.txt 1|./index/Как узнать стоимость ремонта.txt 1|./index/Декоративно-отделочные работы.txt";
preg_match_all("#\d+\|\./index/(.+?).txt#i",$one,$out);
unset($out[0]);
//print_r($out);
foreach ($out[1] as $a) print $a;
?>
|
Результат этого кода:
Устройство половПроект и дизайн интерьераПлиточные работыКак узнать стоимость ремонтаДекоративно-отделочные работы
|
Код:
<?php
$one = "1|./index/Устройство полов.txt 1|./index/Проект и дизайн интерьера.txt 1|./index/Плиточные работы.txt 1|./index/Как узнать стоимость ремонта.txt 1|./index/Декоративно-отделочные работы.txt";
preg_match_all("#\d+\|\./index/(.+).txt#i",$one,$out);
unset($out[0]);
foreach ($out[1] as $a) print $a;
//print_r($out);
?>
|
Результат:
Устройство полов.txt 1|./index/Проект и дизайн интерьера.txt 1|./index/Плиточные работы.txt 1|./index/Как узнать стоимость ремонта.txt 1|./index/Декоративно-отделочные работы
|
Во втором случае строка не меняется. Вот что я хотела сказать | |
|
|
|
|
|
|
|
для: Лена
(03.10.2008 в 10:03)
| | В действительности она меняется. Вначале строки нет "1|./index/", а в конце ".txt". Все из-за жадности выражения. Без символа ? берется максимальная строка. | |
|
|
|