Определить заданное количество вкладок в ретроспективном выражении Regex (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 без пробелов.


person joaoal    schedule 03.08.2014    source источник
comment
Что вы хотите совместить?   -  person Avinash Raj    schedule 03.08.2014
comment
вы имеете в виду это regex101.com/r/vC2yW4/4   -  person Avinash Raj    schedule 03.08.2014
comment
@AvinashRaj см. правки выше.   -  person joaoal    schedule 03.08.2014


Ответы (2)


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

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

ДЕМО

OR

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

ДЕМО

person Avinash Raj    schedule 03.08.2014
comment
\K игнорирует ранее совпавшие символы. - person Avinash Raj; 03.08.2014

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

(?<=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

person anubhava    schedule 03.08.2014
comment
почти работает. но я не хочу, чтобы пробелы не были частью возвращаемой строки. вот почему их нужно включить в lookbehind... - person joaoal; 03.08.2014
comment
Вы можете использовать: (?<=some-html-stuff\>\n\s{7})([A-Za-z0-9]+) для этого. - person anubhava; 03.08.2014
comment
это не работает. мой полный код (?<=\"some-htmlstuff\"\>\n\s{6})([A-Za-z0-9\s\.]+)" только с 6 в скобках, так как есть только шесть вкладок... Я тоже пробовал это решение, но оно не работает... оно работает для вас? - person joaoal; 03.08.2014
comment
Вы проверили демонстрационную ссылку? Если это не работает для меня, я не публикую ответ здесь. - person anubhava; 03.08.2014
comment
я сделал. этот демонстрационный сайт потрясающий! мне придется исправить это внутри моего кода, но теперь я знаю, что теоретически это работает. спасибо! - person joaoal; 03.08.2014
comment
Да, это действительно потрясающий онлайн-тестер регулярных выражений. Рад, что это сработало для вас. - person anubhava; 03.08.2014