Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вырезать подстроку из тегов
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Вырезать подстроку из тегов

Страниц (1): [1]
 

1. energ - 18 Апреля, 2012 - 18:30:14 - перейти к сообщению
Добрый день, имеется документ с тегами <name>Тут внутри название</name> (и таких тегов много).

Нужны простейшие функции которые вырежут все названия из этих тегов и пропишут из мне на экране в строчку Улыбка
2. dzubchik - 18 Апреля, 2012 - 18:46:22 - перейти к сообщению
energ,теги разные?
3. EuGen - 18 Апреля, 2012 - 18:46:50 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\<name[^\>]*\>(.*)\<\/name\>/Usmi', $sData, $rgMatches);
  2. echo(join(' ', $rgMatches[1]));

?
4. dzubchik - 18 Апреля, 2012 - 18:49:23 - перейти к сообщению
EuGen, как всегда первый. А я почти сделал Недовольство, огорчение
5. energ - 18 Апреля, 2012 - 18:52:47 - перейти к сообщению
[quote=dzubchik]preg_match_all('/\<name[^\>]*\>(.*)\<\/name\>/Usmi', $sData, $rgMatches);
echo(join(' ', $rgMatches[1]));[/quote]

Теги только наймы нужны, конечно в файле много разных тегов, но в конкретном случае интересуют именно наймы
(Добавление)
[quote=EuGen]
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\<name[^\>]*\>(.*)\<\/name\>/Usmi', $sData, $rgMatches);
  2. echo(join(' ', $rgMatches[1]));

?[/quote]


Только не пойму куда массив со строками добавлять, вот у меня есть xml документ, он в образе url'а простого, в целом мне нужно просто его вставить и получить наймы в строку из всего xml файла
(Добавление)
[quote=dzubchik][/quote]

Лучше покажите ваш пример, я все равно не особо понимаю как этими регулярками пользоваться ))
6. EuGen - 18 Апреля, 2012 - 18:57:41 - перейти к сообщению
energ
$sData - это Ваш текст (в данном случае содержащий xml). Можете получить его, например, через file_get_contents
7. energ - 18 Апреля, 2012 - 19:03:17 - перейти к сообщению
EuGen пишет:
energ
$sData - это Ваш текст (в данном случае содержащий xml). Можете получить его, например, через file_get_contents


ОО все получилось! )) спасибо! )) В итоге скрипт получился такого вида:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4.  
  5. $sData= file_get_contents('url');
  6.  
  7. preg_match_all('/\<name[^\>]*\>(.*)\<\/name\>/Usmi', $sData, $rgMatches);
  8.  
  9.  
  10.  
  11.  
  12. foreach ($rgMatches[1]  as $key => $value) {
  13. echo "<b>$value $key</b><br>";
  14. }
  15.  
  16.  
  17. ?>
  18.  
  19.  

(Добавление)
В целом стала еще одна проблема - фразы которые выводятся из названий, нужно чтобы они были не более 7 символов, если их больше то последние слова должны отразиться и выводиться только первые 7.

Словами могут считаться даже просто цифры или знаки даже если они имеют всего 1 символ
(Добавление)
еще бы не плохо если бы из строк вырезались кавычки - как двойные там одинарные, знаки плюсов и запятые, кончено вырезаться они должны до того как начнется проверка на количество слов в строке
(Добавление)
При том если в фразе есть такая конструкция слово-слово или слово-цыфра то это считается за 1 слово и тире тут конечно вырезать не надо, а вот скобки как раз таки не нужны
8. energ - 19 Апреля, 2012 - 13:25:02 - перейти к сообщению
Как я понил тутнужно 2 условия с регулярками, и при их выполнении использовать еще 2 регулярки, но только я вообще не понимаю как пользоваться этими регулярками.....
9. EuGen - 19 Апреля, 2012 - 13:54:27 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $iLength=7;
  2. preg_match_all('/\<name[^\>]*\>(.*)\<\/name\>/Usmi', file_get_contents('url'), $rgMatches);
  3. $rgMatches[1]=array_map(function($mValue) use ($iLength)
  4. {
  5.    $rgTemp=array_map(function($sValue) use ($iLength)
  6.    {
  7.       return substr($sValue, 0, $iLength);
  8.    }, preg_split('/\s+/', preg_replace('/[\'\"\+,]/', '', $mValue), -1, PREG_SPLIT_NO_EMPTY));
  9.    return join(' ', $rgTemp);
  10. }, $rgMatches[1]);
  11. echo(join(" ", $rgMatches[1]));

?
10. snikers987 - 19 Апреля, 2012 - 14:05:57 - перейти к сообщению
Есть средства для разбора xml, зачем тут вообще регулярка?
11. energ - 19 Апреля, 2012 - 14:36:26 - перейти к сообщению
[quote=snikers987][/quote] Если знаешь как эффективнее - поделись, напиши свой вариант как оно должно быть
(Добавление)
EuGen пишет:
PHP:
скопировать код в буфер обмена
  1. $iLength=7;
  2. preg_match_all('/\<name[^\>]*\>(.*)\<\/name\>/Usmi', file_get_contents('url'), $rgMatches);
  3. $rgMatches[1]=array_map(function($mValue) use ($iLength)
  4. {
  5.    $rgTemp=array_map(function($sValue) use ($iLength)
  6.    {
  7.       return substr($sValue, 0, $iLength);
  8.    }, preg_split('/\s+/', preg_replace('/[\'\"\+,]/', '', $mValue), -1, PREG_SPLIT_NO_EMPTY));
  9.    return join(' ', $rgTemp);
  10. }, $rgMatches[1]);
  11. echo(join(" ", $rgMatches[1]));

?


тут какая то ошибка в синтаксисе в строке "$rgMatches[1]=array_map(function($mValue) use ($iLength)"
12. EuGen - 19 Апреля, 2012 - 14:44:48 - перейти к сообщению
energ
Работать будет на php 5.3+
13. energ - 19 Апреля, 2012 - 16:20:47 - перейти к сообщению
EuGen пишет:
energ
Работать будет на php 5.3+

У нас на хостинге 5.2.17 и php 5.3 говорят еще не скоро ставить будут.....
14. energ - 25 Апреля, 2012 - 13:52:54 - перейти к сообщению
А как вообще это вырезание лишних элементов делаться?

Можно простой пример с описанием?

 

Powered by ExBB FM 1.0 RC1