2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:23 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287613 писал(а):
то введите регексп который задан
Не получится - во всех предоставленных языках $+?$ имеет смысл, отличный от композиции $+$ и $?$ (и с позиции "подходит / не подходит" $+?$ и $+$ не отличаются).

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:26 


05/09/16
12130
mihaild в сообщении #1287609 писал(а):
какая из ваших строк там не подходит?

Не могу сказать, т.к. это будет очень сильная подсказка.
Ну да ладно, раз вы настаиваете ;)
ww
не подходит.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:32 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287616 писал(а):
Не могу сказать, т.к. это будет очень сильная подсказка.
Нет, не будет, любой желающий может ввести все строки там самостоятельно и проверить.
Вы не ответили на вопрос по условию:
mihaild в сообщении #1287609 писал(а):
Что считается "предыдущим выражением" для $+$ и $?$?

wrest в сообщении #1287613 писал(а):
результат не меняется, просто ускоряется работа
По описанной вами спецификации - меняется.
Если считать, что $?$ навешивается на $.+$, то строка ww удовлетворяет второй части выражения (скобки матчатся на w), а если убрать $?$ из скобок - то не удовлетворяет.

Если убрать $?$ из скобок, то получатся строки, состоящие из повторения одной и той же строки длины хотя бы 2 хотя бы 2 раза (ну и пустые и односимвольные): скобки матчатся на всё длины 2 и больше, дальше это нужно повторить хотя бы один раз.

(Оффтоп)

У меня возникает подозрение, что вы написали регулярку под реальный язык, проверили, что работает, и выкатили как задачку, забыв о том что в реальном языке +? - это отдельный квантификатор.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:37 


05/09/16
12130
mihaild в сообщении #1287622 писал(а):
Что считается "предыдущим выражением" для $+$ и $?$?

Всё по правилам регулярных выражений. Это т.н. квантификаторы.

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

+ означает "один или больше количество раз" и эквивалентен {1,}
? означает "ноль или один раз" и эквивалентен {0,1}

-- 26.01.2018, 16:44 --

mihaild в сообщении #1287622 писал(а):
У меня возникает подозрение, что вы написали регулярку под реальный язык, проверили, что работает, и выкатили как задачку,

Нет, это неверное подозрение, языковые реализации тут не при чем.
Единственное языкозависимое там, насколько я знаю, это указание на начало и конец строки (^ и $), которое не обязательно делать в Java

mihaild в сообщении #1287622 писал(а):
Если убрать $?$ из скобок, то получатся строки, состоящие из повторения одной и той же строки длины хотя бы 2 хотя бы 2 раза (ну и пустые и односимвольные): скобки матчатся на всё длины 2 и больше, дальше это нужно повторить хотя бы один раз.

Уже ближе. И?

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:46 
Заслуженный участник
Аватара пользователя


09/09/14
6328
Похоже, что таким образом ищется строка, состоящая из непростого числа одинаковых символов. Но выражение срабатывает также для строк из нескольких символов, если эта комбинация повторяется больше одного раза.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:51 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287616 писал(а):
ww
не подходит.
И почему же?
..+?: первая точка матчится на w, .+? матчится на пустую строку, все скобки целиком матчатся на w, \1 матчится на w, \1+ матчится на w, итого вся регулярка целиком матчится на ww. Что собственно и можно увидеть по ссылке.
wrest в сообщении #1287625 писал(а):
Нет, это неверное подозрение, языковые реализации тут не при чем.
Я не понимаю, как это соотнести с
wrest в сообщении #1287613 писал(а):
Кстати, второй знак вопроса (тот что внутри скобок), если он смущает, можно вообще убрать, результат не меняется, просто ускоряется работа
Если считать, что ..+? - это .((.+)?) (скобки незахватвающие), то этому выражению удовлетворяет односимвольная строка. А если убрать ? - то уже не удовлетворяет.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:51 


05/09/16
12130
mihaild в сообщении #1287622 писал(а):
то строка ww удовлетворяет второй части выражения (скобки матчатся на w)

В скобках две точки, причем после второй стоит плюс, а значит всего точек в скобках не меньше двух, так что на одну w скобки не матчатся, сорри.

-- 26.01.2018, 16:55 --

grizzly в сообщении #1287630 писал(а):
Похоже, что таким образом ищется строка, состоящая из непростого числа одинаковых символов.

Трудно было написать "из составного"? Да! Это оно!
grizzly в сообщении #1287630 писал(а):
Но выражение срабатывает также для строк из нескольких символов, если эта комбинация повторяется больше одного раза.

Да, это тоже верно.

Возможно, я немножко погнался за красотой, и надо было спросить другое.
На какие строки НЕ срабатывает нижеследующее
Код:
^1?$|^(11+?)\1+$

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 16:56 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287633 писал(а):
а значит всего точек в скобках не меньше двух, так что на одну w скобки не матчатся, сорри
А ? на что навешивается?
Вот выражение .+?
wrest в сообщении #1287625 писал(а):
? означает "ноль или один раз" и эквивалентен {0,1}
Что конкретно должно быть повторено "нол или один раз"?

-- 26.01.2018, 16:57 --

wrest в сообщении #1287633 писал(а):
Трудно было написать "из составного"?
"Непростое" и "составное" - это разные вещи.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 17:01 


05/09/16
12130
mihaild в сообщении #1287632 писал(а):
.+? матчится на пустую строку,

Нет, .+? на пустую строку НЕ матчится.

mihaild в сообщении #1287632 писал(а):
А если убрать ? - то уже не удовлетворяет.

Ну послушайте, по-вашему, мне что, надо было в условиях задачи изложить что значит жадная и ленивая квантификация?

-- 26.01.2018, 17:02 --

mihaild в сообщении #1287634 писал(а):
"Непростое" и "составное" - это разные вещи.

А, ну да, ноль и единица не составные.

-- 26.01.2018, 17:07 --

mihaild в сообщении #1287634 писал(а):
А ? на что навешивается?
Вот выражение .+?wrest в сообщении #1287625

писал(а):
? означает "ноль или один раз" и эквивалентен {0,1}
Что конкретно должно быть повторено "нол или один раз"?

+? это единый квантификатор (ленивый плюс), ну есть же это везде, вы же правильно писали:
mihaild в сообщении #1287615 писал(а):
Не получится - во всех предоставленных языках $+?$ имеет смысл, отличный от композиции $+$ и $?$ (и с позиции "подходит / не подходит" $+?$ и $+$ не отличаются).

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 17:12 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287636 писал(а):
Ну послушайте, по-вашему, мне что, надо было в условиях задачи изложить что значит жадная и ленивая квантификация?
Не надо, задача вполне нормально сформулирована (только надо уточнить, что всё-таки такое "предыдущее выражение"), только ответ у нее другой. Вы же описали, что значат $+$ и $?$, и из вашего описания следует, что $.+?$ матчится на пустую строку (если нет - то прошу указать, к какому выражению применяется "0 или 1 вхождение" из определения $?$).

Если же брать $+?$ в значении в реальных языках (ленивый $+$), то получится ровно то, что я сказал первым сообщением в этой теме
mihaild в сообщении #1287569 писал(а):
Пустая строка, один символ, $www^*$, где $|w| > 1$.
Если что-то другое - приведите отличающий пример.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 17:48 


05/09/16
12130
mihaild в сообщении #1287638 писал(а):
Если же брать $+?$ в значении в реальных языках (ленивый $+$), то получится ровно то, что я сказал первым сообщением в этой теме
mihaild в сообщении #1287569

писал(а):
Пустая строка, один символ, $www^*$, где $|w| > 1$.
Если что-то другое - приведите отличающий пример.

wwwww (5 штук w, и любое простое число одинаковых символов) не сматчится.

Пример использования (Питон):
Код:
def is_prime(n):
    return not re.match(r'^.?$|^(..+?)\1+$', '1'*n)

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 17:53 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287641 писал(а):
wwwww (5 штук w, и любое простое число одинаковых символов) не сматчится.
И что тут выступает в роли строки $w$ с условием $|w| > 1$?

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 17:55 


05/09/16
12130
mihaild в сообщении #1287642 писал(а):
И что тут выступает в роли строки $w$ с условием $|w| > 1$?

Строка из четырех символов, то есть "wwww" - срабатывает, а из пяти, т.е. "wwwww" - НЕ срабатывает.
Теперь рассказывайте что значит $|w| > 1$, я так понял это "количество одинаковых символов, например w, больше одного".

На загадку предполагался ответ вроде того который дал (выделение жирным мое)
grizzly в сообщении #1287630 писал(а):
ищется строка, состоящая из непростого числа одинаковых символов. Но выражение срабатывает также для строк из нескольких символов, если эта комбинация повторяется больше одного раза.

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

Я понял, что не надо было вообще писать что значат символы в регулярках, т.к. "краткиое описание" оказалось неполным, а ссылка на "Подробнее" не помогла. Вы почему-то подумали, что я придумал какие-то свои правила для регулярок, и вся загадка немного э... смазалась. :(

Очарование загадки должно было быть в том, что казалось бы, где регулярки и где простые числа, а вот подиж ты, решето Эратосфена оказывается вот так вот создается в регулярке...

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 18:42 
Заслуженный участник
Аватара пользователя


16/07/14
9217
Цюрих
wrest в сообщении #1287644 писал(а):
Теперь рассказывайте что значит $|w| > 1$, я так понял это "количество одинаковых символов, например w, больше одного".
Это значит "$w$ - строка, состоящая более чем из одного символа".

Ну и вы согласны, что под вашу регулярку не подходит скажем строка 1234, но подходит 1212?

И всё-таки регулярки с обратными ссылками - это не регулярный язык (и даже не контекстно свободный; язык, состоящий из строк вида $1^p$, где $p$ - простое, контекстно-свободным не является). Но распознать язык, состоящий из строк из простого количества произвольных символов, кажется, нельзя даже ими.

 Профиль  
                  
 
 Re: Загадочный regexp
Сообщение26.01.2018, 18:52 


05/09/16
12130
mihaild в сообщении #1287648 писал(а):
И всё-таки регулярки с обратными ссылками - это не регулярный язык

Здесь нет обратных ссылок (если, конечно, вы под этим подразумеваете lookaround-ы типа (?<=шаблон).

mihaild в сообщении #1287648 писал(а):
Это значит "$w$ - строка, состоящая более чем из одного символа".

строка из простого числа, например пяти (что больше чем один, да?) одинаковых символов не матчится.

mihaild в сообщении #1287648 писал(а):
Ну и вы согласны, что под вашу регулярку не подходит скажем строка [tt1234[/tt], но подходит 1212?

Согласен, конечно.

mihaild в сообщении #1287648 писал(а):
Но распознать язык, состоящий из строк из простого количества произвольных символов, кажется, нельзя даже ими.

Этого я не понял совсем. Что?
Меняем все символы в строке на один и тот же, затем проверяем, простое ли число символов получилось регуляркой из первого поста этой темы...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3  След.

Модератор: Модераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group