2014-02-13 2 views
0

Допустим, у меня есть строка, например, как это:QRegExp найти п-й символ не в HTML-тег

<span class='hi'>Blah <span class='bye'> is here </span> and here</span> 

И я хочу, чтобы получить индекс в строке 7-го символа, который не является частью HTML-тег («i»). Я знаю, что смогу сделать это, разделив и перебирая куски, но мне интересно, есть ли QRegExp, который я могу использовать для этого. Я пробовал кучу всполошились, используя regexp.indexIn():

QRegExp r("[^<](?!>)"); // Matches index 1 
QRegExp r("[^<](?![^>])"); // Matches index 15 (the ' within the first span) 
QRegExp r("[^<](.){7}(?!>)"); // Matches index 1 
QRegExp r("^<.>[^<](?!>).{7}"); // Gives me -1 

Есть регулярное выражение, которое может сделать это (обобщенно)?

ответ

0

rxIt обычно не рекомендуется анализировать HTML, используя регулярное выражение, но многие люди это делают. Не могли бы вы вместо этого попробовать заменить?

QRegExp rx("<[^>]*>"); 
QString example = "<span class='hi'>Blah <span class='bye'> is here </span> and here</span>"; 
example.replace(rx, ""); 

А затем найти 7-й символ? с помощью:

example.at(7); 
+0

Yeh, я понимаю, что это не идеально, но это намного меньше вычислительной работы, чем разбора DOM или что-то подобное (или это?). Проблема в том, что я хочу вставить пролет в определенную точку, поэтому нам пришлось бы вернуть все эти удаленные промежутки назад. Поэтому я надеялся, что regexp по существу переведёт в индекс, чтобы в этот момент я мог пробить промежуток. Я также могу использовать цикл для этого. – gremwell