#(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]
Но походу такой возможности нет...
Насколько я уже понял, то ему надо указать ссылку внутри символьного класса, например [^\\1]
Но походу такой возможности нет...
Спустя 7 минут, 14 секунд (6.12.2011 - 19:48) dadli написал(а):
Winston
Цитата |
Насколько я уже понял, то ему надо указать ссылку внутри символьного класса, например [^\\1] |
да
Цитата |
Но походу такой возможности нет... |
ну харашо понятно, если нет, нет.
Спустя 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 написал(а):
А так разве нельзя ?
Спустя 41 секунда 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)) { но не получилос :) |
как насчет такого варианта?
(?<!\1)(.)\1{2}(?!\1)
а по поводу
[^\1]можно попробовать так
(?s:(?!\1).)
Спустя 1 день, 3 часа, 35 минут, 55 секунд (8.12.2011 - 14:27) dadli написал(а):
Winston
а если строка например такои: a4skkkese
duhon
ви хители сказать что:
по идее ето [^\1] то же самое что (?s:(?!\1).)
eсли да, кажется не так
а если строка например такои: 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
виведит "совпадение есть"
a по идее должно ничего не виводить
$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"; виведит "совпадение есть" a по идее должно ничего не виводить |
все работает коректно
я выше написал чистую регулярку, как она есть, а ты ее вставил в "двойные кавычки", и не экранировал.
не советую вообще пользоваться двойными кавычками в 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
да в прошлом примере работал, :) но здес почему виведит "совпадение есть" ? шаблон же такои "один раз символ k, потом тоже один раз символ k, и еше раз k, но потом всо кроме символ k". а в строкe есть k 4 раз подряд
$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).) и патаму спрашивал, если так, то зачем так происходит ?
просто duhon сказал что [^\1] то же самое что (?s:(?!\1).) и патаму спрашивал, если так, то зачем так происходит ?
Спустя 9 минут, 32 секунды (8.12.2011 - 19:21) duhon написал(а):
Цитата (dadli @ 8.12.2011 - 15:56) |
duhon$str = 'askkkkt'; да в прошлом примере работал, :) но здес почему виведит "совпадение есть" ? шаблон же такои "один раз символ 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
Попробуй так
Спустя 1 минута, 44 секунды Winston написал(а):
Ну этот пример решит задачу если нужный символ всегда будет вначале.
Попробуй так
$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
наверное я не понятна написал суть моего вопроса, я хотел написать шаблон котории проверял, есть ли встроке любои одинакови символ три раза подряд, ета троика может бить в любом месте в строке, а строка может бить любои, например такои: assdddde55r
Winston
наверное я не понятна написал суть моего вопроса, я хотел написать шаблон котории проверял, есть ли встроке любои одинакови символ три раза подряд, ета троика может бить в любом месте в строке, а строка может бить любои, например такои: 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
виведит "есть", а нада что виведит "нету", потому что символ d есть 4 (а не 3) раз подряд
:(
$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
спасибо
спасибо
_____________
когда чарли чаплин принимал участие в конкурсе: "клон чарли чаплинов", то чарли занимал третю позицию.