【Qt编程】基于Qt的词典开发系列<十五>html特殊字符及正则表达式

简介: 1、html特殊字符的显示      我们知道html语言和C语言一样也有一些特殊字符,它们是不能正常显示的,必须经过转义,在网上可以查到如何显示这些字符,如下图所示:上图给了最常用的特殊字符的显示,下面我们来实验一下:首先在记事本中写入一句:程序例#include然后就文本后缀名改为.html后,用浏览器打开,显示如下:我们从上图可以发现include后面没有显示,但是当我们在文本中写入:程序例#include 或程序例#include 时就能正常显示了。
1、html特殊字符的显示

      我们知道html语言和C语言一样也有一些特殊字符,它们是不能正常显示的,必须经过转义,在网上可以查到如何显示这些字符,如下图所示:


上图给了最常用的特殊字符的显示,下面我们来实验一下:
首先在记事本中写入一句:
<font color=blue>程序例</font>#include<stdio.h>
然后就文本后缀名改为.html后,用浏览器打开,显示如下:


我们从上图可以发现include后面没有显示,但是当我们在文本中写入:

<font color=blue>程序例</font>#include<stdio.h>   
或
<font color=blue>程序例</font>#include<stdio.h> 

时就能正常显示了。显示结果如下图:


        我们知道Qt能够支持html语言,但是我在编写可以查询c语言函数(肯定有#include后面<>的特殊字符的显示问题)的时候发现使用上面的方法仍然不能显示特殊字符,后来灵机一动,就决定用全角<>来代替半角<>。这样就不会当成是特殊字符了,就可以正常显示了。半角和全角的转换只需要点击下图中的第3个按钮:


虽然说,使用全角后看起来不是很协调,但还看得过去,如果读者有什么好的方法,请不吝赐教。

2、正则表达式
        接着上面的问题继续说,比如我有一个C语言函数词典库,我取其中一段来举例:
<font color=blue>程序例</font>:<br>#include <span style="color:#ff0000;"><</span>stdio.h <span style="color:#ff0000;">></span><br>#include <span style="color:#ff0000;"><</span> stdlib.h <span style="color:#ff0000;">></span><br>int main(void)<br>
因为我们需要将上述半角的<>转换为全角的<>,并且 只是替换处于头文件的半角<>即字符串中为红色的部分。当然当文件比较小的时候,可以手动查找替换,但是由于词典一半都有十几M,这时就必须使用正则表达式了。
        在Qt中,使用了QRegExp来支持正则表达式。关于正则表达式的语法,网上都有很多教程,我就不细说了。从上面的实例字符串的内容,我们知道包含了几个头文件,所以我们在匹配时,要分别匹配各个头文件两边的半角<>, 即我们要使用非贪婪模式,否则就会从第一个头文件的<匹配到最后一个头文件的>。我们知道,在正则表达式中,非贪婪模式是由'?'来指定的,但是对于QRegExp类来说,?是不合法的。 在QRegExp中,要使用setMinimal函数来指定贪婪模式setMinimal(true)就是非贪婪模式,setMinimal(false)就是贪婪模式。

        通过上面两部分的讲解,就可以完成C语言函数库词典的显示了。下面通过代码实现,新建Qt Gui应用程序,选择基类为QWidget,其中只需要修改widget.cpp里的内容即可(需要在widget.ui界面中,添加两个label,分别命名为label和label1)。
widget.cpp文件:
#include "widget.h"
#include "ui_widget.h"

#include<QString>
#include<QRegExp>
#include<QDebug>
#include<QLabel>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QString str="<font color=blue>程序例</font>:<br>#include <stdio.h ><br>#include < stdlib.h ><br>int main(void)<br>";
    ui->label->setText(str);  //由于Qt也能识别html格式,而< >是html的特殊字符,因此不处理的话,就会出现显示出错

    QRegExp rx("#include (<(.*.h )>)");//正则表达式里的括号是为了获取匹配的内容
    rx.setMinimal(true);//非贪婪模式

    int pos=0;//从字符串的开始部分
    for(int i=0;i<str.size();i++)
    {

        pos=rx.indexIn(str,0);//得到匹配字符串的位置
        while(pos!=-1)//匹配成功
        {
        str.replace(rx.cap(1),"<"+rx.cap(2)+">");//这里是进行替换,如果不明白rx.cap是什么,可以qDebug显示内容
        pos=rx.indexIn(str,pos+rx.matchedLength());//从当前位置,继续往后进行匹配
        }
    }

ui->label1->setText(str);
}

Widget::~Widget()
{
    delete ui;
}
程序运行结果如下:



下面放一张查单词软件用到的特殊字符显示和使用正则表达式后的截图:



注意:我使用的平台为QT5,如果转移到Qt4上有错的话,可以反向参考http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5


基于Qt的词典开发系列

  1. 词典框架设计及成品展示
  2. 本地词典的设计
  3. 开始菜单的设计
  4. 无边框窗口的缩放与拖动
  5. 无边框窗口的拖动
  6. 界面美化设计
  7. 调用网络API
  8. 用户登录及API调用的实现
  9. JSON数据解析
  10. 国际音标的显示
  11. 系统托盘的显示
  12. 调用讲述人
  13. 音频播放
  14. 自动补全功能
  15. HTML特殊字符及正则表达式
  16. 后序
作品下载地址(发布版)http://download.csdn.net/detail/tengweitw/8548767
作品下载地址(绿色版)http://download.csdn.net/detail/tengweitw/8830495
源码下载地址http://download.csdn.net/detail/tengweitw/8830503

原文:http://blog.csdn.net/tengweitw/article/details/38734201

作者:nineheadedbird







目录
相关文章
|
4月前
|
JavaScript API
鸿蒙开发:了解正则表达式
从给出的文本中,按照既定的相关规则,匹配出符合的数据,其中的规则就是正则表达式,使用正则表达式,可以使得我们用简洁的代码就能实现一定复杂的逻辑,比如判断一个邮箱账号是否符合正常的邮箱账号,再比如判断一个手机号是否正常的手机号,等等,正因为有了正则,得以让文本处理起来更加的简单。
128 7
HTML 字符实体1
HTML 字符实体用于替代预留字符和键盘上无法输入的字符。例如,小于号 (&lt;) 和大于号 (&gt;) 必须用 `&lt;` 和 `&gt;` 替换,以避免被浏览器误认为标签。常用的字符实体还包括不间断空格 (`&nbsp;`),用于在页面中增加空格数量。
HTML 字符实体2
发音符号是加在字母上的字形,用于表示不同的发音。常见的变音符号有尖音符( ̀)、抑音符( ́)等,它们可以出现在字母的上方、下方或内部,甚至两个字母之间。这些符号可以与字母或数字字符组合使用,以改变其发音。例如:a&#768; 表示 à,O&#769; 表示 Ó。
HTML 字符实体3
HTML字符实体用于在网页中显示特殊字符。常见的字符实体包括空格(&nbsp;)、小于号(&lt;)、大于号(&gt;)、和号(&amp;)等。注意,实体名称对大小写敏感。例如,版权符号可以表示为 &copy; 或 &#169;。
|
7月前
|
自然语言处理 开发者
HTML 字符实体的妙用
HTML字符实体在网页设计与开发中有诸多妙用:首先,它们能避免解析冲突,确保特殊字符如`&lt;`、`&gt;`和`&`不会被误认为标签;其次,可用于显示不可见字符,如不间断空格`&nbsp;`,优化文本格式。此外,借助字符实体还可轻松插入多语言符号,如`&yen;`表示的日元符号¥,提升网页国际化水平。在代码中使用字符实体亦能增强可读性,尤其当涉及大量特殊字符时,便于他人理解。最后,在旧版浏览器或特定编码环境下,字符实体确保了文本的一致显示,提高了兼容性。
|
7月前
Qt开发
Qt开发
|
8月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
348 2
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
7月前
|
存储 文字识别 前端开发
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
|
7月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
172 0

推荐镜像

更多