Не работает регулярка

Армян

Новичок
Не работает регулярка

Здрасьте!

У меня есть задача нужно из массива слов оставить только те слова, которые состоят из букв и знака "-", и длина которых не менее 3 символов.

Собсно ничего сложно. Но почему то не работает такая регулярка:
"/[a-zA-Zа-яА-Я\-]{2,}/i"

маны читал, и там увидел такое [a-z]{3}, отсюда выводо что моя рега тоже должна работать, думаю.


вот еще, кодировка тут скорее всего не причем так как "/[a-zA-Zа-яА-Я\-]/i" работает, но включает слова длиной 1-2 символа, это не хорошо.

Заранее спасибо!
 

Андрейка

Senior pomidor developer
тож читал ман, увидел там такое
PHP:
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
отсюда вывод - так у тебя должно заработать

не заработает - в мане еще много примеров, подберем ченить..
 

Армян

Новичок
Андрейка
сеньк :) какойто результат похожий на нужный есть... буду читать ман про flag etc...

-~{}~ 11.08.07 18:48:

сделал не совсем красиво но работает:
иф ( (preg_match("/[a-zA-Zа-яА-Я\-]/i", $words[$key]) == 0) or (strlen($words[$key]) < 2) ) {
...
}
:D
 

Shiz

Новичок
Армян
хм, а что ты имеешь в виду под "массивом слов"? массив строк? если да, то для какой цели разделять строку на слова если потом мы их рекэкспом мучать будем

PHP:
$test='большая чОрная книга лежит на столе';
$pattern="/([a-zа-я-]{3,})+/i";
preg_match_all($pattern,$test,$matches);
print "<pre>".print_r($matches,1)."</pre>";
выводит:

PHP:
Array
(
    [0] => Array
        (
            [0] => большая
            [1] => чОрная
            [2] => книга
            [3] => лежит
            [4] => столе
        )

    [1] => Array
        (
            [0] => большая
            [1] => чОрная
            [2] => книга
            [3] => лежит
            [4] => столе
        )

)
 

Армян

Новичок
Shiz
хм.. я както не подумал.. :)
я делал так
PHP:
$words = explode(" ", $words);
foreach ($words as $key => $word) {
            $words[$key] = trim($words[$key], "\s\"'.,_");
            if ( (preg_match("/[a-zA-Zа-яА-Я\-]/i", $words[$key]) == 0) or (strlen($words[$key]) < 2) ) {
                unset($words[$key]);
            }
        }
но думаю Ваш вариант подходит :) спасибо буду пользовать :)
 

Shiz

Новичок
Армян
индийский код=))

кстати, лучше использовать

PHP:
$pattern="/[a-zа-я-]{3,}/i";
 

Армян

Новичок
Shiz
индийский код=))
спасибо за комплемент :D

да, у вас тоже ошибочка [a-zа-я-] => [a-zа-я\-]

-~{}~ 11.08.07 19:45:

mishco
армяно-русско-пхп шный код :D

-~{}~ 11.08.07 19:55:

всетаки дело в кодировке тоже :(
 
Сверху