Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Помогите с регулярным выражением (SATURN_NEO)
Author Message
SATURN_NEO
Участник форума



Joined: 21 May 2006
Posts: 60
Карма: 2
   поощрить/наказать


PostPosted: Wed Jan 09, 2008 6:40 pm (написано за 2 минуты 28 секунд)
   Post subject: Помогите с регулярным выражением
Reply with quote

Помогите плиз.
Есть поле для ввода.
Нужно выловить следующую комбинацию символов: слово пробел слово
Но не учитывать: слово пробел.
Ни это регулярное выражение /^[\w]+[\W]+[\w]+$/ ни это /^[\w]+ +[\w]+$/ не работает.
Back to top
View user's profile Send private message Send e-mail
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Wed Jan 09, 2008 9:24 pm (спустя 2 часа 43 минуты; написано за 1 минуту 45 секунд)
   Post subject:
Reply with quote

SATURN_NEO /\w+\s\w+/
и причем там ^, $ и [] ?


если нужно в результат отдельно оба слова, то /(\w+)\s(\w+)/

вроде так ^^
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Wed Jan 09, 2008 10:30 pm (спустя 1 час 5 минут; написано за 3 минуты 21 секунду)
   Post subject:
Reply with quote

дайте точное определение термину "слово" в вашей ситуации и расскажите чем отличаются случаи
1. слово
2. слово пробел
3. пробел слово
4. слово пробел слово

еще вопрос: возможны ли случаи из нескольких "слов" через много "пробелов" и отличаются ли они от случая 4?
Back to top
View user's profile Send private message
SATURN_NEO
Участник форума



Joined: 21 May 2006
Posts: 60
Карма: 2
   поощрить/наказать


PostPosted: Thu Jan 10, 2008 12:00 pm (спустя 13 часов 30 минут; написано за 2 минуты 24 секунды)
   Post subject:
Reply with quote

Валенок
у меня ваше выражение срабатывает даже если ввожу просто слово без пробелов

Rumata
Слово - это набор любых символов, кроме пробела.
Случаи 1-3 не должны вылавливаться. Только случай 4.
Rumata wrote:
возможны ли случаи из нескольких "слов" через много "пробелов"
.
Возможны и должны попадать в случай 4, т.е. вылавливаться.
Back to top
View user's profile Send private message Send e-mail
kernel32
Участник форума



Joined: 18 Mar 2006
Posts: 256
Карма: 24
   поощрить/наказать

Location: Москва

PostPosted: Thu Jan 10, 2008 1:13 pm (спустя 1 час 12 минут; написано за 16 секунд)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
preg_match (www.php.net/preg_match)('/^[^ ]+? [^ ]+?$/','слово слово')
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Thu Jan 10, 2008 1:47 pm (спустя 34 минуты; написано за 1 минуту 31 секунду)
   Post subject:
Reply with quote

SATURN_NEO
возможно лучшим решением будет
1. разбить строку на отдельные "слова"
2. посчитать количество "слов"
3. количество меньше 2 расценивать как ошибку
Back to top
View user's profile Send private message
kernel32
Участник форума



Joined: 18 Mar 2006
Posts: 256
Карма: 24
   поощрить/наказать

Location: Москва

PostPosted: Thu Jan 10, 2008 2:08 pm (спустя 21 минуту; написано за 15 секунд)
   Post subject:
Reply with quote

Rumata прав. Здесь, пожалуй, производительнее будет использовать explode()
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Jan 10, 2008 4:12 pm (спустя 2 часа 3 минуты; написано за 2 минуты 33 секунды)
   Post subject:
Reply with quote

а зачем такое надо вообще?
1. www.php.net/manual/ru/function.str-word-count.php
2. strpos(" ", trim($str)) !== FALSE => минимум 2 слова. по идее сравнимо с count(explode(" ", $str)) > 1 :)

а вообще дурацкое определение слова. "\t\t\n\t\t" это тоже слово, как я понял :) :) :)
Back to top
View user's profile Send private message
kernel32
Участник форума



Joined: 18 Mar 2006
Posts: 256
Карма: 24
   поощрить/наказать

Location: Москва

PostPosted: Thu Jan 10, 2008 4:37 pm (спустя 25 минут; написано за 25 секунд)
   Post subject:
Reply with quote

Quote:
а вообще дурацкое определение слова. "\t\t\n\t\t" это тоже слово, как я понял :) :) :)
dimagolov, ну кому слово, а кому - нет :)
Back to top
View user's profile Send private message
SATURN_NEO
Участник форума



Joined: 21 May 2006
Posts: 60
Карма: 2
   поощрить/наказать


PostPosted: Thu Jan 10, 2008 6:14 pm (спустя 1 час 36 минут)
   Post subject:
Reply with quote

Большое спасибо kernel32.
Но ваше выражение не учитывает случаи
слово пробел слово пробел
слово пробел слово пробел слово
и т.д.
Если бы это поправить, было бы замечательно.
Я бы давно сделал explode(), но нужно именно регулярное выражение.
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Jan 10, 2008 6:19 pm (спустя 5 минут; написано за 1 минуту 11 секунд)
   Post subject:
Reply with quote

SATURN_NEO, а может сформулируете конкретно задачу? так как в задании написано, без пересказывания? уж больно похоже на учебное задание высосанное из пальца :(
Back to top
View user's profile Send private message
SATURN_NEO
Участник форума



Joined: 21 May 2006
Posts: 60
Карма: 2
   поощрить/наказать


PostPosted: Thu Jan 10, 2008 6:56 pm (спустя 37 минут; написано за 1 минуту 40 секунд)
   Post subject:
Reply with quote

Может так понятней:
нужно исключить ситуацию когда пользователь вводит в поле ввода 2 слова и более.
Но только регулярным выражением.
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Jan 10, 2008 9:02 pm (спустя 2 часа 6 минут; написано за 2 минуты 22 секунды)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
/^[\s]*[^\s]+[\s]*$/ // только одно слово, иначе исключаем.
 
Back to top
View user's profile Send private message
kernel32
Участник форума



Joined: 18 Mar 2006
Posts: 256
Карма: 24
   поощрить/наказать

Location: Москва

PostPosted: Thu Jan 10, 2008 9:22 pm (спустя 19 минут; написано за 29 секунд)
   Post subject:
Reply with quote

Quote:
Нужно выловить следующую комбинацию символов: слово пробел слово
SATURN_NEO, мне всё равно задача не очень ясна, честно говоря...
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Jan 11, 2008 3:45 pm (спустя 18 часов 22 минуты; написано за 1 минуту 53 секунды)
   Post subject:
Reply with quote

SATURN_NEO
сдается мне, что вы хотите решить учебную задачу посредством форума.
я вам дал полную информацию о том, как обработать искомую строку.
вам достаточно оформить алгоритм.
дерзайте.
Back to top
View user's profile Send private message
SATURN_NEO
Участник форума



Joined: 21 May 2006
Posts: 60
Карма: 2
   поощрить/наказать


PostPosted: Fri Jan 11, 2008 6:03 pm (спустя 2 часа 18 минут; написано за 1 минуту 51 секунду)
   Post subject:
Reply with quote

Большое спасибо dimagolov это то что нужно.
Задача не учебная, просто проверка проводится не в чистом ПХП а в Symfony. И для того чтобы использовать возможности Symfony, а не писать все проверки самому, нужно было регулярное выражение. Вот и все.
Всем спасибо.

Вопрос решен, тему можно закрыть.
Back to top
View user's profile Send private message Send e-mail
mamont
Заглянувший



Joined: 22 Jan 2008
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Tue Jan 22, 2008 3:46 pm (спустя 10 дней 21 час 42 минуты; написано за 20 секунд)
   Post subject:
Reply with quote

Если кто то хочет помочь, постучитесь в icq 1331818. или yahoo onic2003. не знаю чем отблагодарить. номерок Аси 7 знаков но симпотный где то завалялся )) сроки жмут (( смотрел Regex Coach и подобные, они для отладки хороши, но не для тех кто в этом дуб-дерево ((

1. Требуется найти все ссылки в которых нет никакого rel= и втавить туда rel="nofollow"
2. Пройтись по всем ссылках, и где присутсвует rel="follow" заменить на пустое.
На выходе у нас все ссылки будут или с rel="nofollow" или без rel="follow".

Это для того что бы для всех ссылок сайта сделать rel="nofollow", за исключением тех где редактор дописал rel="follow", которое дает команду не вставлять rel="nofollow".

Решение:
1. (его еще нет)
2.
Code (php): скопировать код в буфер обмена
$text = preg_replace (www.php.net/preg_replace)('/<a rel="follow"([^>]+)>/i','<a \\1 >',$text);
- это работает.

Если видите другой хороший вариант, я рассмотрю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML