Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Преобразовать строку в массив, исключая знаки препинания
 
 автор: baston   (06.12.2009 в 16:11)   письмо автору
 
 

Есть задача преобразовать строку в массив. Но некоторые слова в строке отделены от других запятыми (знаки препинания). Например, надо преобразовать вот такую строку:
"вот, какие дела творятся в мире"
Используя функцию explode я создал такой код:
$text = "вот, какие дела творятся в мире!";
$ar = explode(" " & ", ", $text);
echo $ar;

Таким образом, в массиве оказались как слова со знаками препинания, так и слова одиночные.
Вопрос: как можно занести в массив только одиночные слова без знаков препинания?
Спасибо.

  Ответить  
 
 автор: sim5   (06.12.2009 в 16:20)   письмо автору
 
   для: baston   (06.12.2009 в 16:11)
 

Во-первых print_r($ar); чтобы просмотреть массив. Во-вторых - объясните вот это:
" " & ", "
для чего и зачем? Вы полагаете что это работает?

  Ответить  
 
 автор: baston   (06.12.2009 в 16:48)   письмо автору
 
   для: sim5   (06.12.2009 в 16:20)
 

Полагал, что да, работает. Это осталось с тех пор, пока я не добавил восклицательный знак в конце строки. Использовал для поиска слов с запятой и с пробелами. Теперь понял, что бессмысленно. Достаточно было " ".

  Ответить  
 
 автор: Trianon   (06.12.2009 в 16:26)   письмо автору
 
   для: baston   (06.12.2009 в 16:11)
 

preg_match_all()

  Ответить  
 
 автор: baston   (06.12.2009 в 18:35)   письмо автору
 
   для: Trianon   (06.12.2009 в 16:26)
 

Воспользовался вашей подсказкой и вот что получилось:
$text = "вот, какие дела творятся в мире!";
preg_match_all ('/[а-яА-Я0-9]+/', $text, $arr, PREG_SET_ORDER);

foreach ($arr as $value)
{
    echo $value, "<br>";
}


Не могу понять, почему выводится слово ARRAY, вместо вывода значений массива.

  Ответить  
 
 автор: neadekvat   (06.12.2009 в 18:37)   письмо автору
 
   для: baston   (06.12.2009 в 18:35)
 

Документацию то по функции читали? А теперь еще раз.

  Ответить  
 
 автор: baston   (06.12.2009 в 18:46)   письмо автору
 
   для: neadekvat   (06.12.2009 в 18:37)
 

Читал и перечитывал. Если выводить массив на экран через print_r, то я вижу значения массива. А через foreach и echo - нет. Так в чем же моя ошибка?

  Ответить  
 
 автор: Trianon   (06.12.2009 в 18:58)   письмо автору
 
   для: baston   (06.12.2009 в 18:46)
 

поставьте вначале тег <PRE>
перед print_r()

  Ответить  
 
 автор: baston   (06.12.2009 в 19:09)   письмо автору
 
   для: Trianon   (06.12.2009 в 18:58)
 

Может быть я что-то недопонимаю, но что это мне дает? Я получил значения массива. Но почему не работает выражение через foreach?
П.С. Да, вроде вникаю, что значением массива являет Array.
Тогда как получить иначе нужные мне слова в массив?

П.С.2. Получаю двумерный массив, если правильно мыслю... Сейчас попробую узнать и сообразить, как вытащить эти значения. В документации написано, что обратиться можно типа так:
$arr[N][B]
, где N - порядковый номер совпадения, а В - номер скобки.
Туго идет...

  Ответить  
 
 автор: Trianon   (06.12.2009 в 19:22)   письмо автору
 
   для: baston   (06.12.2009 в 19:09)
 

можно задать PREG_PATTERN_ORDER и взять сразу нужный массив.

  Ответить  
 
 автор: baston   (06.12.2009 в 19:39)   письмо автору
 
   для: Trianon   (06.12.2009 в 19:22)
 

Боже мой! Спасибо! Получилось, все-таки. Дотумкал:
$text = "вот, какие дела творятся в мире!";
preg_match_all ("/[а-яА-Я0-9]+/", $text, $arr, PREG_PATTERN_ORDER);
/*echo "<pre>";
print_r($arr);*/

foreach ($arr[0] as $value)
{

    echo $value, "<br>";
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования