Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) поиск заведомо неизвестного количества совпадений / 18 сообщений из 18, страница 1 из 1
24.01.2006, 20:20
    #33500912
Savage_Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Всем доброго времени суток!
Появилась такая проблема:
необходимо составить регулярное выражение, которое проверяло бы: содержатся ли в строке str подстроки str1, str2, .... и т.д. - количество подстрок заведомо неизвестно. Как составить регулярное выражение, чтобы проверялось именно одновременно наличие всех подстрок str1...n?

Уточнение: например если записать так:
"str1|str2" - выдает положительный результат если присутствует одна из указанных ветвей, т.е. действует по принципу "ИЛИ", а мне необходимо чтобы было как "И".

Возможно ли записать это условие одной строкой?
...
Рейтинг: 0 / 0
24.01.2006, 21:15
    #33500961
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Savage_AlexВозможно ли записать это условие одной строкой?А нужно ли?
...
Рейтинг: 0 / 0
24.01.2006, 21:41
    #33500986
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
это замедлит работу, если "одной строкой" ...
далее, если все-таки хотите "одной строкой", формируете переменную с значением $str="\$str=~s/(str_1)(str2_)(str_3)...(str_n)//";
Код: plaintext
eval "$str";
...
Рейтинг: 0 / 0
24.01.2006, 22:43
    #33501036
Savage_Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
дело в том что если я передаю указанный вами паттерн в функцию preg_match, то ничего не получается.

Либо паттерн будет иметь другой вид для этой функции?

Немогли бы вы привести пример паттерна в preg_match, например для:
в строке str найти соответствие строкам str1, str2, str3
...
Рейтинг: 0 / 0
25.01.2006, 00:00
    #33501087
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
дело в том что если я передаю указанный вами паттерн в функцию preg_match, то ничего не получается.

Либо паттерн будет иметь другой вид для этой функции?
что бы потом не возникало таких вопросов, надо ФАК (не всего сайта, а хотя бы данного раздела) посещать перед тем как задавать вопросы

Код: plaintext
1.
2.
$str = "preg_match(\"/(str1)\s(str2)\s(str3)/i\", \"str1 str2 str3\")";
eval ($str);

PHP: preg_match - Manual
PHP: eval - Manual
...
Рейтинг: 0 / 0
25.01.2006, 00:33
    #33501103
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
А я смотрю, вы большой любитель eval'а. А зачем он там вообще? Кроме того, ваше решение проблемы не решает - подстроки str1, str2 и strN, по условию задачи, могут располагаться в любом порядке (по крайней мере - в условии это не оговорено). Так же, как и не оговорено, что подстроки могут и должны разделяться символами \s
Тем не менее ответ на вопрос "зачем решать задачу одним регулярником?" - остаётся загадкой.
...
Рейтинг: 0 / 0
25.01.2006, 09:01
    #33501337
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
А я смотрю, вы большой любитель eval'а. А зачем он там вообще?
А как тогда решить проблему "одной строкой"?

Кроме того, ваше решение проблемы не решает - подстроки str1, str2 и strN, по условию задачи, могут располагаться в любом порядке (по крайней мере - в условии это не оговорено).
В том то и дело "не оговорено" ...

Так же, как и не оговорено, что подстроки могут и должны разделяться символами \s
Я просто показал в качестве примера ...

Тем не менее ответ на вопрос "зачем решать задачу одним регулярником?" - остаётся загадкой.
Для меня тоже, я автора предупредил, что "это" замедлит работу.
...
Рейтинг: 0 / 0
25.01.2006, 10:02
    #33501460
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Николай aka Motodor А я смотрю, вы большой любитель eval'а. А зачем он там вообще?
А как тогда решить проблему "одной строкой"?


"одна строка" != "одно регулярное выражение"... а строки они длинные бывают... :)
...
Рейтинг: 0 / 0
25.01.2006, 10:03
    #33501462
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
nik2 Николай aka Motodor А я смотрю, вы большой любитель eval'а. А зачем он там вообще?
А как тогда решить проблему "одной строкой"?


"одна строка" != "одно регулярное выражение"... а строки они длинные бывают... :)
думаю это надо сказать не мне, а автору топика
...
Рейтинг: 0 / 0
25.01.2006, 11:43
    #33501848
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Николай aka MotodorА как тогда решить проблему "одной строкой"?А eval как-то помогает это сделать? :) Тем более - это не ответ на вопрос - а зачем он там вообще, когда я с таким же успехом мог бы написать
Код: plaintext
$str = preg_match("/(str1)\s(str2)\s(str3)/i", "str1 str2 str3");
?
Будем считать, что бессмысленность самого выражения я не заметил.
PS: есть простое правило - eval никогда не нужен. Если он вам нужен - значит вы что-то делаете не так.
...
Рейтинг: 0 / 0
25.01.2006, 12:04
    #33501935
Savage_Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Всем спасибо за внимание.
Дело в том что, как было указано выше, необходима конструкция, которая искала бы подстроки str1, str2, str3 - в любом их порядке следования в строке str (то что они должны следовать именно в строгой последовательности - это уже просто сужение поставленного условия что действительно не оговаривалось). И я просто хотел узнать возможно ли записать это все кратко, как например для "str1|str2"

Видимо задачу прийдется таки решать другим путем :)
...
Рейтинг: 0 / 0
25.01.2006, 12:11
    #33501961
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
* Николай aka MotodorА как тогда решить проблему "одной строкой"?А eval как-то помогает это сделать? :) Тем более - это не ответ на вопрос - а зачем он там вообще, когда я с таким же успехом мог бы написать
Код: plaintext
$str = preg_match("/(str1)\s(str2)\s(str3)/i", "str1 str2 str3");
?

Автор написал ведь, что "заведомо неизвестно" сколько должно быть совпадений ....
...
Рейтинг: 0 / 0
25.01.2006, 12:51
    #33502085
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Savage_Alex
Видимо задачу прийдется таки решать другим путем :)
Не поверишь, но ты совершенно прав!!!
...
Рейтинг: 0 / 0
25.01.2006, 13:51
    #33502296
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Николай aka MotodorАвтор написал ведь, что "заведомо неизвестно" сколько должно быть совпадений ....А разве из этого следует, что там необходим eval? Вы всё же на поставленный то вопрос ответье - зачем он там? ;) Savage_AlexИ я просто хотел узнать возможно ли записать это все кратко, как например для "str1|str2"Возможно. Но оно того не стоит. Есть такой принцип - KISS. И для этой задачи он как нельзя кстати ;)Видимо задачу прийдется таки решать другим путем :)Это было бы наиболее разумно :)
...
Рейтинг: 0 / 0
25.01.2006, 13:53
    #33502307
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
* Видимо задачу прийдется таки решать другим путем :)Это было бы наиболее разумно :)Забыл добавить - следуя тому же принципу и здравому смыслу - регулярные выражения вам не нужны вообще ;)
...
Рейтинг: 0 / 0
25.01.2006, 14:46
    #33502544
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
А разве из этого следует, что там необходим eval? Вы всё же на поставленный то вопрос ответье - зачем он там? ;)
Код: plaintext
1.
$str = "preg_match(\"/(str1)\s(str2)\s(str3)/i\", \"str1 str2 str3\")";
а как тогда лучше сформировать код, который потом интерпритировать?

p.s. зачем " стирали ? $str = " ... "
...
Рейтинг: 0 / 0
25.01.2006, 16:56
    #33503047
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Николай aka Motodorа как тогда лучше сформировать код, который потом интерпритировать?А зачем формировать код и его интерпретировать? Разве в задаче это требуется? Надо-то с гулькин хвост
Код: plaintext
1.
$bool = true;
foreach ($needle as $v) if ($bool &= strpos($haystack,$v) !== false) break;
...
Рейтинг: 0 / 0
25.01.2006, 16:57
    #33503053
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) поиск заведомо неизвестного количества совпадений
Пардон, поспешил
Код: plaintext
1.
2.
3.
4.
5.
$bool = true;
foreach ($needle as $v)
  if (strpos($haystack,$v) === false) {
    $bool = false;
    break;
  }
да и так читаемее ;)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) поиск заведомо неизвестного количества совпадений / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]