[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с простой регуляркой!!!!!!
qwerty2010
Вот такая простенькая задачка. Есть строки вида:

слово1 всякаяфигня ххххх всякаяфигня слово2
слово1 всякаяфигня слово2

Тут
слово1, слово2 и ххххх — четко известны;
всякаяфигня — это любые символы или полное их отсутствие

Мне надо найти только те строки, где нет последовательности ххххх, а слово1 и слово2 есть (слово1 идет перед слово2).

Конечно, можно сначала найти (слово1)(.*)(слово2), а потом анализировать, содержит ли строка ххххх. Но можно ли это описать одним РВ, чтобы все делалось за один вызов ф-ии preg_match_all()?

Шо-то меня переклинило, не получается. Да и чайник я в РВ пока.Помогите пожалуйста!



Спустя 41 минута, 37 секунд (26.09.2010 - 12:48) DedMorozzz написал(а):
#word1.*?xxxx.*?word2#

Спустя 24 минуты, 26 секунд (26.09.2010 - 13:13) qwerty2010 написал(а):
Цитата (DedMorozzz @ 26.09.2010 - 09:48)
#word1.*?xxxx.*?word2#

Так оно распознает

слово1 всякаяфигня ххххх всякаяфигня слово2

а мне надо наоборот, чтоб выдавало true, там где ххххх нету, т.е. надо чтоб вот эти строки были выданы:

слово1 всякаяфигня слово2

Спустя 48 минут, 5 секунд (26.09.2010 - 14:01) DedMorozzz написал(а):
ну инвертируй. Если найдено - ошибка.

Спустя 1 час, 28 минут, 1 секунда (26.09.2010 - 15:29) qwerty2010 написал(а):
Цитата (DedMorozzz @ 26.09.2010 - 11:01)
ну инвертируй. Если найдено - ошибка.

Что инвертировать? Не работает ваш вариант как надо sad.gif

$pattern = "#word1.*?xxxxx.*?word2#";
$s1 = "word1 всякаяфигня ххххх всякаяфигня word2";
$s2 = "word1 всякаяфигня word2";
$s3 = "word1 всякаяфигня otherword";

preg_match_all($pattern, $s1, ...)> true
preg_match_all($pattern, $s2, ...)> false
preg_match_all($pattern, $s3, ...)> false


т.е. инверсия сделает строку $s3 правильной. А правильная тут только $s2. Мне надо, чтобы из этих трех строк true было только для $s2.

Спустя 36 минут, 35 секунд (26.09.2010 - 16:06) netruxa написал(а):
может
#word1[^xxxx]+?word2#
?

Спустя 20 минут, 8 секунд (26.09.2010 - 16:26) qwerty2010 написал(а):
Цитата (netruxa @ 26.09.2010 - 13:06)
может
#word1[^xxxx]+?word2#
?

Да не, не работает... Я уже подозреваю, что одним регулярым выражением (одним вызовом preg_match_all) тут не отделаешься. Ну, из двух последоватеьных вызовов — это и коню понятно как делать. Но хочется одним вызовом. Надо именно одним и позарез! Что скажут гуру пихиписткие? Можно за один вызов решить проблему?

Спустя 2 часа, 31 минута, 55 секунд (26.09.2010 - 18:58) DedMorozzz написал(а):
завтра напишу.

Спустя 15 часов, 24 минуты, 40 секунд (27.09.2010 - 10:22) DedMorozzz написал(а):
[^xxxx] - это инвертирует символьный класс, а никак не слово.
По теме :
Первое, что в голову пришло, через колбек:
<?php
$s1 = "word1 zzz ххх yyy word2";
$s2 = "word1 jjj word2";
$s3 = "word1 ooo otherword";

$a= preg_replace_callback('#word1.*word2#',create_function('$matches','
$b = strpos($matches[0],
\'ххх\');
if (!empty($cool.gif) return "false";
else return "true";
'
),$s2);
echo $a;

Чуток попозжее может и проще придумаю
Быстрый ответ:

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