Э-э-э... Похоже, мне требуется переводчик. Про (?= я знаю, меня озадачило выражение (?> , про которое Вы написали
...теперь работает
Если оно работает так, как именно написано, то оно вовсе не лишнее, ибо вопрос был задан про:Drugmix wrote:YuS
теперь работает, просто оно лишнее там.
а это наиболее быстрая из видов групп в регулярках, т.к. в ней нет возврата по строке и она запрещает проверку при первом же найденном варианте внутри группы.Cкажите, что быстрее
Это не одно и то же...Drugmix wrote: Возможно, стоило бы приравнять (?> к (?= и разрешить двоякое употребление.
Code: Select all
^(`[^\n\r]+?[^\.!:])<br>$
Code: Select all
Don't change me<br>
`but change me<br>
`and me<br>
`except me!<br>
Code: Select all
\1.<br>
Code: Select all
`[^\n\r]+?[^\.!:]
Code: Select all
^(`[^\n\.!:]+?)<br>$
Code: Select all
`.change me<br>
`and me too! please<br>
`me: wants to be changed too<br>
Code: Select all
^(`[^\n\r]+?)(?<![\.!:])<br>$
То есть если требуется разрешить точки в строках (но не в конце), то ничего не сделать? Типа вот такого:Instructor wrote:Для данной задачи можно так:Code: Select all
^(`[^\n\.!:]+?)<br>$
Code: Select all
`Also. Should. Be. Changed<br>
Спасибо, это гораздо лучше.Drugmix wrote:Поэтому для данной задачи, видимо, лучше как-то так:Code: Select all
^(`[^\n\r]+?)(?<![\.!:])<br>$
Группа перед (?<!…) - жадная и съедает всё что может да побольше, (поэтому твой вариант и не работал, т.к. второй группе не оставалось на съедение даже 1 символа, а 1 символ не может съедаться разными группами дважды).Infocatcher wrote:Только не понятно, в чем тут отличие с точки зрения редактора.
То есть почему не работает мой вариант понятно (но это все равно не радует), а вот почему (с учетом предыдущего) работает шаманство с (?<! ...) – не понятно.
Это не совсем так. Учитывая тот факт, что групп может быть больше чем одна, то вполне реализуется вот такой вариант:Infocatcher wrote:То есть если требуется разрешить точки в строках (но не в конце), то ничего не сделать? Типа вот такого:Code: Select all
`Also. Should. Be. Changed<br>
Code: Select all
Что: ^(`[^\n\r]+?)([^.!:])<br>$
Чем: \1\2.<br>
Ну, как же? Отличие значительное, ведь negative lookbehind вполне работает по своему назначению, т.е. если буквально прочитать выражение:Infocatcher wrote: Только не понятно, в чем тут отличие с точки зрения редактора.
То есть почему не работает мой вариант понятно (но это все равно не радует), а вот почему (с учетом предыдущего) работает шаманство с (?<! ...) – не понятно.
Code: Select all
1:(Q)
2:(Q)(?=Q)([^\1])
3:(Q)(?=Q)([^\1])(?=Q)([^\1\2])
4:(Q)(?=Q)([^\1])(?=Q)([^\1\2])(?=Q)([^\1\2\3])
5:(Q)(?=Q)([^\1])(?=Q)([^\1\2])(?=Q)([^\1\2\3])(?=Q)([^\1\2\3\4])
6:(Q)(?=Q)([^\1])(?=Q)([^\1\2])(?=Q)([^\1\2\3])(?=Q)([^\1\2\3\4])(?=Q)([^\1\2\3\4\5])
7:(Q)(?=Q)([^\1])(?=Q)([^\1\2])(?=Q)([^\1\2\3])(?=Q)([^\1\2\3\4])(?=Q)([^\1\2\3\4\5])(?=Q)([^\1\2\3\4\5\6])
8:(Q)(?=Q)([^\1])(?=Q)([^\1\2])(?=Q)([^\1\2\3])(?=Q)([^\1\2\3\4])(?=Q)([^\1\2\3\4\5])(?=Q)([^\1\2\3\4\5\6])(?=Q)([^\1\2\3\4\5\6\7])