[ID CS4-CS6] Поиск текста GREP

  • Автор темы Автор темы ewa
  • Дата начала Дата начала
Если УС1 - #, а УС2 - ##, то у меня получилось такое:
Код:
(#.*\r)([^#]+\r)+?.+?\r*?##
Ваще ничего не понял, но работает! Спасибо!
...и ещё два вопроса тогда ))
Во-первых, не могли бы вы пояснить по шагам, как это работает?
А во-вторых, можно вас попросить тогда дописать, чтобы ловило и вторую половину, то есть от ## до ближайшего #. Понятно, что если вторым прогоном, то просто меняем эти символы в вашем коде. А сразу -- одним прогоном -- можно? Чтобы выделялось всё между ближайшими #, содержащее внутри ##?
 
Во-первых, не могли бы вы пояснить по шагам, как это работает?
во-первых ГРЕП для писателей , а не для читателей. на следующий день уже сложно понять что написано:)
во-вторых, чтобы пояснить по шагам надо написать много букв, а это сложно , поэтому почитайте что-нибудь про греп в интернете

но примерно так:
(
# означает #
. любой символ
* эти любые символы могут быть, а могут не быть
\r конец абзаца
)
(
[^#] любой символ кроме #
+ этих символов один или много
\r конец абзаца
)
+? то что в предыдущих скобках один или много раз, но "жадный" поиск
. любой символ
+? предыдущий символ один или много раз, но "жадный" поиск
\r конец абзаца
*? предыдущий символ может быть от 0 до много, "жадный" поиск
## означает ##

т.е. ищется # , после которой могут быть любые символы, потом конец абзаца, потом может быть несколько абзацев в которых не должно быть решетки, потом должны быть 2 решетки. (конец абзаца не является любым символом, а решетка является любым символом, поэтому возникают все эти сложности...)
 
  • Спасибо
Реакции: suntory
во-первых ГРЕП для писателей , а не для читателей. на следующий день уже сложно понять что написано:)
во-вторых, чтобы пояснить по шагам надо написать много букв, а это сложно , поэтому почитайте что-нибудь про греп в интернете

но примерно так:
(
# означает #
. любой символ
* эти любые символы могут быть, а могут не быть
\r конец абзаца
)
(
[^#] любой символ кроме #
+ этих символов один или много
\r конец абзаца
)
+? то что в предыдущих скобках один или много раз, но "жадный" поиск
. любой символ
+? предыдущий символ один или много раз, но "жадный" поиск
\r конец абзаца
*? предыдущий символ может быть от 0 до много, "жадный" поиск
## означает ##

т.е. ищется # , после которой могут быть любые символы, потом конец абзаца, потом может быть несколько абзацев в которых не должно быть решетки, потом должны быть 2 решетки. (конец абзаца не является любым символом, а решетка является любым символом, поэтому возникают все эти сложности...)
и тут слово "жадный" надо заменить на "ленивый". извините :)
 
утром , на свежую голову, у меня работает выражение попроще :)
(#)([^#]+)##([^#]+)
Чёрт побери! Это же то же самое, что я и писал в своём самом первом комментарии! За исключением произведённой замены ~P и ~M на уникальные символы. И ещё у меня была ошибка, я сразу после найденного (#) начинал искать ([^##]+), то есть "не второй уникальный символ" вместо "не первый уникальный символ". Поторопился. Вот это существенная ошибка в логике, запомню и учту. А в остальном думал всё правильно! Так что я и ответ получил, и за себя (почти) рад! 😀
Спасибо вам огромное! И что мозги вправили, и что ошибку вот так в логике нашли, и что ответ ваш работает, и про замену тоже буду знать. А то бился в ~P и ~M, а они никак не ловились.
И особое спасибо за объяснение 😀 Так подробно было даже избыточно. Оказывается, я не знал про "жадный" и "нежадный" поиск, меня знаки вопроса смутили. Теперь тоже запомню.
 
Последнее редактирование: