[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск обязательного вхождения из набора
dersu
Здравствуйте. Есть задача, найти строки длиной 3 символа, содержащие хотя бы одну цифру из набора [\d _,:~\-\/\.], после этой строки должен идти Y
т.е. регексп делаю такой:
/[\d _,:~\-\/\.]{3}Y/
Все замечательно находится, но мне нужно, чтобы перед Y в любом месте обязательно встречалась хотя бы одна цифра, а вот такая строчка чтобы не ловилась:
"He say - Yes, I want to go home"

Буду премного благодарен за помощь.



Спустя 8 минут, 30 секунд (28.07.2009 - 08:43) Oyeme написал(а):
Напиши подробней что должно получиться и что не получаеться..
Перечитываю тектс ,и не понимаю суть задачи.

Спустя 1 час, 24 минуты, 5 секунд (28.07.2009 - 10:07) dersu написал(а):
Вот регексп:
/[\d _,:~\-\/\.]{3}Y/
Предназначен, чтобы ловить такое
123Y
1_0Y
.2 Y
~ 1Y
и т.д., которое можно выразить словами: "3 символа, содержащие хотя бы одну цифру из заданного набора"

Но чтобы не ловил
_- Y

т.е. чтобы фразу указанную ниже не поймал.
"He say - Yes, I want to go home"

Спустя 19 минут, 59 секунд (28.07.2009 - 10:27) Sylex написал(а):
Цитата (dersu @ 28.07.2009 - 13:07)
"3 символа, содержащие хотя бы одну цифру из заданного набора"


blink.gif ph34r.gif

Спустя 28 минут, 35 секунд (28.07.2009 - 10:56) dersu написал(а):
Цитата (Sylex @ 28.07.2009 - 07:27)
Цитата (dersu @ 28.07.2009 - 13:07)
"3 символа, содержащие хотя бы одну цифру из заданного набора"

ага, надо перефразировать "3 символа из заданного набора, содержащие хотя бы одну цифру".

Спустя 48 минут, 1 секунда (28.07.2009 - 11:44) Sylex написал(а):
dersu
фразу ловит, т.к. там

пробел тире пробел

по-моему проще после регулярки сделать доп. проверку

Спустя 1 час, 14 минут, 56 секунд (28.07.2009 - 12:59) dersu написал(а):
Цитата (Sylex @ 28.07.2009 - 08:44)
по-моему проще после регулярки сделать доп. проверку

Это понятно, но мне нужно только одно регулярное выражение, в принципе я уже понял, что нужно использовать позитивную опережающую проверку.

Спустя 1 день, 22 часа, 13 минут, 19 секунд (30.07.2009 - 11:12) dersu написал(а):
Отвечаю сам себе.
Нужно использовать позитивную опережающую проверку, о которой я прочитал вот здесь http://doc.aceweb.ru/full_8_241_modered.html.

Итоговое решение вот такое /[\d _,:~\-\/\.]{3}(?<=(\d..|.\d.|..\d))Y/
он-лайн отладка регулярных выражений

Спустя 21 час, 25 минут, 50 секунд (31.07.2009 - 08:38) Sylex написал(а):
dersu
PHP
<?php

$a 
= '
123Y
1_0Y
.2 Y
1..Y
.5_3453434Y
~ 1Y
_- Y
He say - Yes, I want to go home
'
;

$a = explode("\n", trim($a));

$pattern = '/[\d _,:~\-\/\.]{3}(?<=(\d..|.\d.|..\d))Y/';

foreach ($a as $s)
    echo $s, ' - ', preg_match($pattern, $s) ? 'да' : 'нет', '<br>';


вот эта длинная строка, тоже должна проходить? Она проходит, там не 3 символа

Спустя 3 часа, 43 минуты, 55 секунд (31.07.2009 - 12:22) dersu написал(а):
Цитата (Sylex @ 31.07.2009 - 05:38)
вот эта длинная строка, тоже должна проходить? Она проходит, там не 3 символа

Эта? .5_3453434Y
Да, должна. Все что стоит левее 3-х символов от "Y" меня не интересует.

Спустя 3 часа, 19 минут, 33 секунды (31.07.2009 - 15:41) Sylex написал(а):
dersu
молодец smile.gif
Быстрый ответ:

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