[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как сделать: "все кроме обратнои ссилки" ?
dadli
привет.
#(k)\\1#
етот шаблон совпадается строке если строка содержит сомвол k и потом еше раз символ k да?
а как написать такои шаблон котории совпадается строке, где есть символ k и потом любои символ кроме k ? конечно можно так #(k)[^к]+# но мне интересуест как нада написать в шаблоне: "всё кроме обратного ссилка" ?
тоест что то такого типа #(k)[^\\1]#
так не работает, как будит правилнее? вообшем можно написать "отказ от обратноги ссилки" в регулярке?



Спустя 24 минуты, 35 секунд (6.12.2011 - 17:14) Winston написал(а):
Негативный просмотр вперед
#(k)(?!\\1)#

Спустя 7 минут, 47 секунд (6.12.2011 - 17:22) dadli написал(а):
Winston

$str = "kk";

if (preg_match("#(k)(?!\\1)#",$str)) {
echo "совпадение есть";
}



виведит: совпадение есть :(

Спустя 18 минут, 56 секунд (6.12.2011 - 17:41) Winston написал(а):
Тебе нужно чтобы только после k не было совпадений ? Или вообще во всей строке? Если первое то так
$str = "khjk";

if (preg_match("#^(k)(?=\\1)#",$str)) {
echo "совпадение есть";
}
else
echo 'нет';

Спустя 9 минут, 46 секунд (6.12.2011 - 17:51) dadli написал(а):
Winston
мне интересует как нада правилнее написать в шаблоне так скажем "все кроме обратнои силки"

например ето
[^к]
азначает что всё кроме символ к да ?

а как написаь всё кроме то, что сидит в круглом скобке тоест всё, кроме обратнои силки ?

Спустя 1 час, 10 минут, 42 секунды (6.12.2011 - 19:02) Winston написал(а):
Подожди, тебе что нужно? Найти все в строке, кроме того символа на который ссылка идет? Или проверить есть ли в строке еще символ, такой же какой и в первой группировке ?

Спустя 15 минут, 59 секунд (6.12.2011 - 19:18) dadli написал(а):
Winston
я хочу написать такои класс, где есть любои символ кроме те, на который ссылка идет

Спустя 20 минут, 6 секунд (6.12.2011 - 19:38) Invis1ble написал(а):
dadli
$str = "kk";

if (preg_match("#^(k)(?!\\1)#",$str)) {
echo "совпадение есть";
}

Спустя 3 минуты, 36 секунд (6.12.2011 - 19:41) Winston написал(а):
Invis1ble
Насколько я уже понял, то ему надо указать ссылку внутри символьного класса, например [^\\1]
Но походу такой возможности нет...

Спустя 7 минут, 14 секунд (6.12.2011 - 19:48) dadli написал(а):
Winston
Цитата
Насколько я уже понял, то ему надо указать ссылку внутри символьного класса, например [^\\1]

да smile.gif
Цитата
Но походу такой возможности нет...

ну харашо понятно, если нет, нет.


Спустя 4 минуты, 18 секунд (6.12.2011 - 19:53) Invis1ble написал(а):
так зачем пытаться "впихнуть" ссылку в класс, если можно воспользоваться опережающей проверкой?

Спустя 6 минут, 39 секунд (6.12.2011 - 19:59) dadli написал(а):
Invis1ble

просто я хотел написать такои шаблон котории проверял есть ли встроке любои одинаковии символ три раза подряд (толко три раза, ни менше ни болше) и хотел сделать так

if (preg_match("#(.){1}\\1\\1[^\\1]*#",$str)) {
echo "совпадение есть";
}



но не получилос :)

Спустя 3 минуты, 39 секунд (6.12.2011 - 20:03) Winston написал(а):
А так разве нельзя ?
if (preg_match("#^(k){3}(?!\\1)$#",$str)) {
echo "совпадение есть";
}




Спустя 41 секунда Winston написал(а):
Или так
if (preg_match("#^(.)\\1{2}(?!\\1)$#",$str)) {
echo "совпадение есть";
}

Спустя 2 минуты, 3 секунды (6.12.2011 - 20:05) Invis1ble написал(а):
пару месяцев назад что-то подобное нужно было сделать, не помню уже получилось или нет

Спустя 14 часов, 45 минут, 42 секунды (7.12.2011 - 10:51) duhon написал(а):
Цитата (dadli @ 6.12.2011 - 16:59)
Invis1ble

просто я хотел написать такои шаблон котории проверял есть ли встроке любои одинаковии символ три раза подряд (толко три раза, ни менше ни болше) и хотел сделать так

if (preg_match("#(.){1}\\1\\1[^\\1]*#",$str)) {
echo "совпадение есть";
}



но не получилос  :)

как насчет такого варианта?
(?<!\1)(.)\1{2}(?!\1)

а по поводу
 [^\1]
можно попробовать так
 (?s:(?!\1).)

Спустя 1 день, 3 часа, 35 минут, 55 секунд (8.12.2011 - 14:27) dadli написал(а):
Winston
а если строка например такои: a4skkkese

duhon
ви хители сказать что:
по идее ето [^\1] то же самое что (?s:(?!\1).)
eсли да, кажется не так


Спустя 1 час, 11 минут, 57 секунд (8.12.2011 - 15:39) duhon написал(а):
Цитата (dadli @ 8.12.2011 - 11:27)
duhon
ви хители сказать что:
по идее ето  [^\1] то же самое что (?s:(?!\1).)
eсли да, кажется не так

почемуже нетак?
покажите пример где она действует некоректно?

Спустя 19 минут, 12 секунд (8.12.2011 - 15:58) dadli написал(а):
duhon
$str = "kk";

if (preg_match("#(k)(?s:(?!\1).)#",$str)) {
echo "совпадение есть";
}



виведит "совпадение есть"
a по идее должно ничего не виводить

Спустя 2 часа, 33 минуты, 48 секунд (8.12.2011 - 18:32) duhon написал(а):
Цитата (dadli @ 8.12.2011 - 12:58)
duhon
$str = "kk";

if (preg_match("#(k)(?s:(?!\1).)#",$str)) {
echo "совпадение есть";
}



виведит "совпадение есть"
a по идее должно ничего не виводить

все работает коректно rolleyes.gif

я выше написал чистую регулярку, как она есть, а ты ее вставил в "двойные кавычки", и не экранировал.
не советую вообще пользоваться двойными кавычками в php без явной на то причины.
перепиши пример с одинарными кавычками

Спустя 8 минут, 9 секунд (8.12.2011 - 18:40) Winston написал(а):
duhon
Цитата (duhon @ 8.12.2011 - 17:32)
(?s:

Что это за группировка такая ?



Спустя 5 минут, 54 секунды Winston написал(а):
Цитата (Winston @ 8.12.2011 - 17:40)
Что это за группировка такая ?


Разобрался уже.



Спустя 7 минут, 25 секунд Winston написал(а):
Проще модификатор s поставить чем городить фигню.

Спустя 16 минут, 27 секунд (8.12.2011 - 18:56) dadli написал(а):
duhon
$str = 'askkkkt';

if (preg_match('#(k){1}\1\1(?s:(?!\1).)#',$str)) {
echo "совпадение есть";
}



да в прошлом примере работал, :) но здес почему виведит "совпадение есть" ? шаблон же такои "один раз символ k, потом тоже один раз символ k, и еше раз k, но потом всо кроме символ k". а в строкe есть k 4 раз подряд

Спустя 3 минуты, 38 секунд (8.12.2011 - 19:00) Winston написал(а):
Цитата
(k){1}\1\1

Можно заменить на
(k){3}

Спустя 3 минуты, 56 секунд (8.12.2011 - 19:04) Winston написал(а):
Цитата (dadli @ 8.12.2011 - 17:56)
но здес почему виведит "совпадение есть"

У тебя используется просмотр вперед с отрицанием, потому если у тебя в строке больше не будет символа который хранится в \1 то собственно preg_match вернет true и тебе будет выведено, что совпадения есть.
А вот если ты вместо (?! напишешь (?= и в строке будут повторяющиеся символы то тебе preg_match вернет true, и выведется "Совпадения есть" - что и есть правильным.

Спустя 8 минут, 3 секунды (8.12.2011 - 19:12) dadli написал(а):
Winston
просто duhon сказал что [^\1] то же самое что (?s:(?!\1).) и патаму спрашивал, если так, то зачем так происходит ?


Спустя 9 минут, 32 секунды (8.12.2011 - 19:21) duhon написал(а):
Цитата (dadli @ 8.12.2011 - 15:56)
duhon
$str = 'askkkkt';

if (preg_match('#(k){1}\1\1(?s:(?!\1).)#',$str)) {
echo "совпадение есть";
}



да в прошлом примере работал,  :) но  здес почему виведит "совпадение есть" ? шаблон же такои "один раз символ k, потом тоже один раз  символ k, и еше раз k, но потом всо кроме символ  k". а в строкe есть k 4 раз подряд

проверь текст askkkkt
сначала этой регуляркой (k){1}\1\1[^k]
а потом этой (k){1}\1\1(?s:(?!\1).)

результат у них будет одинаковый
а по поводу того что должно быть только 3К и нечего кроме, то ответ тебе уже и я написал и другие

З.Ы. нашел вариант который я тебе предлагал
(?<!\1)(.)\1{2}(?!\1)
, а это [^\1] изначально было неверным решением

Спустя 14 минут, 59 секунд (8.12.2011 - 19:36) Winston написал(а):
dadli
Попробуй так
$str = "kssjsjljl"; // false
$str = "kssjkkkljl"; // true
$str = "kssjljlk"; // true

if (preg_match('#^(k)((?!\\1).)*$#',$str))
echo "нету";
else
echo 'есть';




Спустя 1 минута, 44 секунды Winston написал(а):
Ну этот пример решит задачу если нужный символ всегда будет вначале.

Спустя 6 минут, 16 секунд (8.12.2011 - 19:43) dadli написал(а):
duhon
Winston
наверное я не понятна написал суть моего вопроса, smile.gif я хотел написать шаблон котории проверял, есть ли встроке любои одинакови символ три раза подряд, ета троика может бить в любом месте в строке, а строка может бить любои, например такои: assdddde55r

Спустя 4 минуты, 35 секунд (8.12.2011 - 19:47) Winston написал(а):
Блин.
Так что ли ?
$str = "kssjsjljl"; // false
$str = "kssjkkkljl"; // true
$str = "kkssjkkljl"; // false

if (preg_match('#^.*(.)\\1{2}.*$#',$str))
echo "есть";
else
echo 'нету';

Спустя 8 минут, 21 секунда (8.12.2011 - 19:56) dadli написал(а):
Winston
$str = "assdddde55r"; 

if (preg_match('#^.*(.)\\1{2}.*$#',$str))
echo "есть";
else
echo 'нету';

виведит "есть", а нада что виведит "нету", потому что символ d есть 4 (а не 3) раз подряд
:(

Спустя 7 минут, 52 секунды (8.12.2011 - 20:03) dadli написал(а):
Winston
скажи плиз ето (?=... "заглядывание" вперед
а что ето (?<=... азначает ?

Спустя 2 минуты, 50 секунд (8.12.2011 - 20:06) Winston написал(а):

Спустя 2 минуты, 4 секунды (8.12.2011 - 20:08) dadli написал(а):
Winston
спасибо


_____________


когда чарли чаплин принимал участие в конкурсе: "клон чарли чаплинов", то чарли занимал третю позицию.

Быстрый ответ:

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