Определить заданное количество вкладок в Regex lookbehind (pcregrep)

Я использую pcregrep, чтобы найти шаблоны над несколькими строками в HTML-коде.

Я пытаюсь сопоставить что-то похожее на это:

<some-html-stuff>
                    sometext<more-html-stuff>

Пространство между sometext и начало строки равно точно шести вкладкам. Поскольку выражение \s соответствует вкладкам, переносам строк и пробелов, я думал, что

pcregrep -M -o -H "(?<=some-html-stuff\>[\s]{7})[A-Za-z0-9]*" /path/file.html

сделал бы работу для меня. но это не так (я добавил еще один для перерыва). Я на самом деле пробовал это с несколькими вариациями числа, но ни один не работает.

Что я наблюдал?

редактировать:

матч должен быть sometext без каких-либо пробелов раньше.

2 ответа

Решение

Вы могли бы использовать \K вместо того, чтобы смотреть назад,

pcregrep -M -o -H "<some-html-stuff\>\s*\K[A-Za-z0-9]+" /path/file.html

DEMO

ИЛИ ЖЕ

pcregrep -M -o -H "some-html-stuff\>\n\t{7}\K[A-Za-z0-9]+" /path/file.html

DEMO

Это регулярное выражение будет работать для вас:

(?<=some-html-stuff\>\n\s{7})([A-Za-z0-9]+)

Вам нужно вставить \n Перед использованием \s{7} чтобы соответствовать 7 вкладок ИЛИ еще использовать \s{8} как это:

(?<=some-html-stuff\>)\s{8}([A-Za-z0-9]+)

поскольку \s также соответствует \n,

RegEx Demo

Другие вопросы по тегам