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

  • https://regex101.com/r/FxYgQ7/2

    1. Регулярка: (<p\s.*?>)(.*?\.)(<\/p>)
    2. Вход: <p class="c01">String1.String2.String3.</p>
    3. Выход: <p class="c01">String1. <span>...</span> String2. <span>...</span> String3. <span>...</span> </p>

Во 2-й группе регулярки (.*?\.) должно на мой взгляд находится собственно "волшебство". Чтобы ST3 не находил как сейчас полностью String1.String2.String3., а выходил с каждым нажатием F3 поочередно на String1. –> String2. –> String3.

Попробую еще сократить

  • Входные данные: <p>lorem ipsum. dolor sit. amet sed.</p>
  • Регэксп: \.\s
  • Выходные данные будут добавляться между предложениями: <p>lorem ipsum. # dolor sit. # amet sed. #</p>.
  • ВОПРОС: Как сделать, чтобы поиск не покидал содержимого тегов <p>,</p> (или других заданных) ?
    • ИЛИ, переиначиваю: КАК добавить символ (#, например) после каждой точки в предложении. НО только в пределах тегов <p>,</p> ?

Ответы (2 шт):

Автор решения: roddar92

Можно попробовать такой вариант, здесь мы допускаем всевозможные символы, кроме открывающегося тега:

(<p\s.*?>)([^<]*?\.)(<\/p>)

А если нужно, чтобы регулярное выражение выделяло все символы, включая и другие теги внутри p, то на вашем примере работает такое вырежение:

(<p\s.*?>)(.*?)(<\/p>)

По идее, основное ограничение на p-теги у вас уже есть. А вам нужно было убрать точку с конца во второй группе.

https://regex101.com/r/FxYgQ7/9

→ Ссылка
Автор решения: Wiktor Stribiżew

Вы можете использовать

(?s)(?:\G(?!\A)|<p>)(?:(?!<p>).)*?\K\.(?=.*?</p>)

См. пример использования регулярного выражения.

До:
введите сюда описание изображения После: введите сюда описание изображения

Подробности

  • (?s) - симол точки теперь также находит переносы строки
  • (?:\G(?!\A)|<p>) - <p> или конец предыдущего удачного совпадения
  • (?:(?!<p>).)*? - любой символ, 0 и более повторов, но как можно меньше, который не является первым символом последовательности символов <p>
  • \K - оператор, удаляющий весь текст из буфера текущего совпадения
  • \. - символ .
  • (?=.*?</p>) - блок просмотра вперёд, который требует наличия подстроки </p> после 0 и более любых символов (как можно меньше).
→ Ссылка