html前台检验特殊字符正则,【Qt编程】html特殊字符及正则表达式
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;
}
程序運行結果如下:
下面放一張查單詞軟件用到的特殊字符顯示和使用正則表達式后的截圖:
總結
以上是生活随笔為你收集整理的html前台检验特殊字符正则,【Qt编程】html特殊字符及正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的用户及权限管理,用户及权限管
- 下一篇: java int stack_java