Qt Regex соответствует HTML-тегу InnerText - PullRequest
2 голосов
/ 31 января 2010

У меня есть HTML-файл с одним тегом .... Какое регулярное выражение необходимо для сопоставления всего содержимого в pre?

<code>QString pattern = "<pre>(.*)
"; QRegExp rx (шаблон); rx.setCaseSensitivity (CS); int pos = 0; QStringList list; while ((pos = rx.indexIn (clipBoardData, pos))! = -1) { список

list.count () всегда 0

Ответы [ 4 ]

3 голосов
/ 31 января 2010

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

Вместо этого используйте QXmlSimpleReader для загрузки XML, затем QXmlQuery , чтобы найти узел PRE и затем извлечь его содержимое.

1 голос
/ 31 января 2010

DO NOT PARSE HTML с использованием регулярных выражений!

Вместо этого используйте настоящий анализатор HTML, например this

0 голосов
/ 01 июня 2012

Я должен согласиться с остальными.Drupal 6.x и старше используют регулярные выражения для большой работы с данными HTML.Он быстро ломается, если вы создаете страницы размером 64 КБ или более.Так что использование DOM или просто indexOf(), как вы уже сделали, является лучшим, гораздо более быстрым решением.

Теперь, для тех, кто хочет узнать больше о регулярных выражениях, Qt использует реализацию perl.Это означает, что вы можете использовать ленивый оператор.Ваше регулярное выражение станет:

<code>(<pre>.*?
) +

для получения каждого из

block in your code (although if you have only one, then the question mark and the plus are not required.) Note that no delimiters at the start and end of the regular expression are required here.</p>

<pre><code>QRegExp re("(<pre>.*?
) + ", Qt :: CaseInsensitive); re.indexIn (html_input); список QStringList= re.capturedTexts ();

Теперь в списке должен быть один тег

или более. 
0 голосов
/ 31 января 2010

я сделал это используя подстроки:

int begin = clipBoardData.indexOf("<pre");
int end = clipBoardData.indexOf("</body>");

QString result = data.mid(begin, end-begin);

Результат включает <pre's>, но я узнал, что это даже лучше;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...