[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Немогу вытащить значения перед запятой
Dron19
всем привет, вот решил позаниматься с регулярками, так сказать побольше времени им уделить. Так вот я поставил перед собой задачу, вытащить все все слова которые находятся перед запятой, то есть мне нужна часть в предложении, которая стоит между пробелом и запятой. Вот как я пытался решить это

<?
$text = "Куда идем мы с пяточком, большой большой секрет,
несем бутылку с коньячком, хвоста за нами нет"
;

$text = preg_replace("#(.*?)([а-я])+(?=,)(.*)#iu","\\2",$text);

echo $text;
?>

Вот еще одно мое решение, оно подошло, но массив получается странный, вот такой
Array ( [0] => Array ( [0] => пяточком [1] => секрет [2] => коньячком ) [1] => Array ( [0] => м [1] => т [2] => м ) ) 1
Как видно в массиве еще содержатся последние буквы найденных слов, не пойму почему. Второе решение

<?php

$text = "Куда идем мы с пяточком, большой большой секрет,
несем бутылку с коньячком, хвоста за нами нет"
;

$text = preg_match_all("#([а-я])+(?=,)#ium",$text,$match);

echo print_r($match) . "<br>" . $match[0][2];

?>




Спустя 3 минуты, 55 секунд (25.01.2011 - 20:23) Dron19 написал(а):
просто хочу иметь нормальный массив, без отходов...

Спустя 5 минут, 3 секунды (25.01.2011 - 20:28) ApuktaChehov написал(а):
preg_match_all('/ [А-ЯЁA-Z]*,/iu', $text, $match);

Но щас дедушка мороззз придет, чего нибудь по круче напишет, он это умеет wink.gif

Спустя 4 минуты, 35 секунд (25.01.2011 - 20:32) Dron19 написал(а):
Цитата (ApuktaChehov @ 25.01.2011 - 17:28)
preg_match_all('/ [А-ЯЁA-Z]*,/iu', $text, $match);

Но щас дедушка мороззз придет, чего нибудь по круче напишет, он это умеет wink.gif

получается пустой многомерный массив
Array ( [0] => Array ( ) ) 1

Спустя 2 минуты, 32 секунды (25.01.2011 - 20:35) ApuktaChehov написал(а):
Кодировку учитываем?

вот у меня работает:

<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php


$text = "Куда идем мы с пяточком, большой большой секрет,
несем бутылку с коньячком, хвоста за нами нет"
;

$text = preg_match_all('/ [А-ЯЁA-Z]*,/iu', $text, $match);

echo print_r($match);?>
</body>
</html>


Результат:
Array ( [0] => Array ( [0] => пяточком, [1] => секрет, [2] => коньячком, ) ) 1

Спустя 1 минута, 38 секунд (25.01.2011 - 20:36) Dron19 написал(а):
кодировку учитываем

Спустя 3 минуты, 14 секунд (25.01.2011 - 20:40) Dron19 написал(а):
сделал так получился тот же результат что и у тебя

$text = preg_match_all('/\s[А-ЯЁA-Z]*(?=,)/iu', $text, $match);

Array ( [0] => Array ( [0] => пяточком [1] => секрет [2] => коньячком ) ) 1
Мне интересно почему с preg_replace у меня не получилось

Спустя 37 секунд (25.01.2011 - 20:40) DedMorozzz написал(а):
Цитата
вытащить все все слова которые находятся перед запятой, то есть мне нужна часть в предложении, которая стоит между пробелом и запятой

здесь описаны 2 разные задачи!

Спустя 1 минута, 43 секунды (25.01.2011 - 20:42) DedMorozzz написал(а):
Вот с прег реплейсом:
$a = 'Куда идем мы с пяточком, большой большой секрет,
несем бутылку с коньячком, хвоста за нами нет'
;
$a = preg_replace('#.*?,(.*?),.*#su','$1',$a);
echo $a;// большой большой секрет

Спустя 3 секунды (25.01.2011 - 20:42) Dron19 написал(а):
Куда идем мы с пяточком, большой большой секрет,
несем бутылку с коньячком, хвоста за нами нет

Нужно получить с помощью preg_replace
пяточком
секрет
коньячком
Но у меня не получилось...

Спустя 2 минуты, 28 секунд (25.01.2011 - 20:45) ApuktaChehov написал(а):
А зачем с preg_replace-ом?

Спустя 2 минуты, 58 секунд (25.01.2011 - 20:47) DedMorozzz написал(а):
если ты ищешь МАССИВ вхождений - тогда и используй ф-и для поиска массивов.
Реплейс удобен для 1го значения.
Микроскопом гвозди можно забить, но результат будет не кошерным

Спустя 26 секунд (25.01.2011 - 20:48) Dron19 написал(а):
просто для себя, интересно поузнавать новое...

Спустя 2 минуты, 5 секунд (25.01.2011 - 20:50) Dron19 написал(а):
вот если поставить задачу вытащить первое значение, то у меня получилось, если кому интересно, то вот как я это сделал

<?php

$text = "Куда идем мы с пяточком, большой большой секрет,
несем бутылку с коньячком, хвоста за нами нет"
;

$text = preg_replace("#.*?([а-яa-z]+),(.*)#su","\\1",$text);
echo $text;
?>

Спустя 1 минута, 37 секунд (25.01.2011 - 20:52) Dron19 написал(а):
всем спасибо...

Спустя 8 минут, 6 секунд (25.01.2011 - 21:00) DedMorozzz написал(а):
да, нормально. Только 2е скобки не нужны. На них формируется ссылка(это время) а она не используется.

Спустя 15 минут, 3 секунды (25.01.2011 - 21:15) Dron19 написал(а):
две последние скобки? Или те, что посередине?

Спустя 40 минут, 43 секунды (25.01.2011 - 21:55) DedMorozzz написал(а):
последняя скобка.
Цитата
"#.*?([а-яa-z]+),(.*)#
эквивалент, без лишних ссылок :
Цитата
"#.*?([а-яa-z]+),.*#

Спустя 1 час, 19 минут, 35 секунд (25.01.2011 - 23:15) Dron19 написал(а):
А да, это я и так сделал, спасибо.

Спустя 56 минут, 14 секунд (26.01.2011 - 00:11) inpost написал(а):
Dron19
Первые вернули результат \\1 , вторые вернули \\2 . Если ты \\2 не используешь, то и нет смысла группировать.

Спустя 7 часов, 28 минут, 26 секунд (26.01.2011 - 07:40) Dron19 написал(а):
За я знаю, просто привычка ссылки делать smile.gif


_____________
PHP+MySQL - уже изучил, осталось всего лишь это:
C,C++,C#,JavaScript,Python,Ruby,Perl,OpenGl,DirectX,ASP.NET - Намерен учить все
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.