C 中使用正規表示式初探

2021-04-09 05:23:47 字數 1352 閱讀 5130

前段忙了好長一段時間,終於有點時間學點新東西了。記得前段看過幾篇安全方面的文章,提到sql注入的問題,於是就想做些防注入方面的探索。要防範注入,最重要是對輸入的資訊,尤其是放到sql語句中執行的資訊,進行驗證,保證其中不包含惡意的sql元素,而這種驗證,正好屬於正規表示式的範圍,於是對c#的正規表示式進行了實驗,以其滿足我的需要,現將實驗結果與大家分享。

執行環境:winxp+iis6+asp.net+c#

正規表示式是一種用於模式匹配和替換的強有力工具,它通過構建乙個表示式對輸入的字串進行模式匹配,然後返回處理後的結果,如果你對它還不了解,請繼續往下看。

以最廣泛的web身份驗證為例:我們從頁面中接收到輸入的使用者名稱,存入變數temp_username,此時變數中可能含有惡意的資訊,我們想要使用者名稱中只包含英文本元,數字和下劃線,就要構造正規表示式對temp_username進行處理,在c#中是這樣進行的:

我們要使用的是system.text.regularexpressions.regex.replace(字串,正規表示式,替換字元)這一靜態方法,其中引數字串當然就是我們的temp_username了,正規表示式我先給出"//w",替換字元是"",整個方法完成後就是

system.text.regularexpressions.regex.replace(temp_username,"//w","");

//它用來替換與正規表示式匹配成功的字元

下面著重說一下c#中正規表示式的構造:

c#正規表示式的構造和字串相同,都是放在引號當中,形式如"look"。

正規表示式中提供了專門的「元字元」,它是在正規表示式中具有特殊意義的專用字元,常用的元字元包括"+","*","?","//s","//s","//d","//w","//w",區分大小寫,下面就對元字元進行說明:

"+" 如"lo+"匹配l後面o出現一次或多次的字串,如"love","look"都是

"*" 待測試

"?" 待測試

"//s" 匹配單個空格符,包括tab和換行符。

"//s" 匹配除單個空格符之外的所有字元。

"//d" 匹配從0到0的數字。

"//w" 匹配字母、數字和下劃線。

"//w" 匹配所有與//w不匹配的字元。(文中第乙個例子就是用了這個元字元,將所有的單引號和空格以及其它非法字元都去掉了)

正規表示式中還提供了專門的定位符,它包括:"^","quot;,"//b"

正規表示式中還提供了專門的範圍介定符"",否定符[^]

[a-z] 表示26個小寫字母中的任意乙個

[abcd] 表示abcd這四個字母中的任意乙個

[0-9] 表示10個數字

[^a-z] 表示除26個小寫字母以外的字元  

C 中使用正規表示式

正規表示式是一種用於模式匹配和替換的強有力工具,它通過構建乙個表示式對輸入的字串進行模式匹配,然後返回處理後的結果,如果你對它還不了解,請繼續往下看。以最廣泛的web身份驗證為例 我們從頁面中接收到輸入的使用者名稱,存入變數temp username,此時變數中可能含有惡意的資訊,我們想要使用者名稱...

正規表示式初探

1.010 88886666,或022 22334455,或02912345678 0 d d 分析 010 022 029 首先是乙個轉義字元 它能出現0次或1次 然後是乙個0,後面跟著2個數字 d 然後是 或 或空格中的乙個,它出現1次或不出現 最後是8個數字 d 不幸的是,剛才那個表示式也能匹...

在C 中使用正規表示式

摘要 描述正規表示式在專案中的實際應用,介紹如何利用它來解析字串。諶總和老譚這兩個人,有不少相似的地方。比如說,在軟體設計和實現的時候,都希望系統的邏輯能清晰地呈現出來,也就是說,使軟體具備清晰的結構。但這一次,老譚走向了自己的反面。討論的是公式的管理問題。專案中的節點量 指標值等資料的計算,都會用...