久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 編程 > Regex > 正文

構(gòu)造復(fù)雜正則表達式的方法

2024-09-07 17:40:14
字體:
供稿:網(wǎng)友

相信在大家的印象中正則表達式都是非常簡單的吧,其實正則表達式也有很復(fù)雜的,那么你知道怎么構(gòu)造復(fù)雜的正則表達式嗎?下面我們就一起去看看構(gòu)造復(fù)雜正則表達式的方法 。

避重就輕

Snopo給出的文本是這樣的:or and name='zhangsan' and id=001 or age>20 or area='%renmin%' and like,問,如何提取其中正確的SQL查詢語句。

簡要分析可知,中間部分是合乎要求的,只是兩端的有若干個like, or, and。構(gòu)造能夠解析合乎SQL語法的查詢語句的正則表達式,應(yīng)該是比較復(fù)雜的。可是,對于具體的問題,也可以更簡單。上述的不良構(gòu)的SQL語句,應(yīng)該是使用程序自動生成的,它的兩端會有一些不符合題意的文本。只要將這些文本去除就可以了。

于是,我寫出了正則表達式:s/^(?:(?:or|and|like)/s*)+|/s*(?:(?:or|and|like)/s*)+$//mi;,這樣就把多行字串首尾的like, or, and以及可能的空白字符全部去掉了,剩下的內(nèi)容即為所求。

分而治之

答案發(fā)過去之后,Snopo顯然不是很滿意這種“偷懶”的辦法。他繼續(xù)問道,能否寫出正則式,用來匹配合符SQL語法要求的條件查詢語句?(只考慮where部分即可,不必寫完整的select。)

的確,從快速解決問題的角度來說,只要能夠行之有效地解決,用什么辦法都可以;不過從學(xué)習(xí)知識的角度來說,不避重就輕,而是刨根問底,才是正途。既如此,就看一下如何使用正則,將該SQL查詢語句解決掉。

最簡單的查詢語句,應(yīng)該是真假判斷,即 where 1; where True; where false,等等。 這樣的語句使用正則式,直接/(?:-?/d+|True|False)/i。

稍復(fù)雜些的單條語句,可以是左右比較,即
?

?

name like 'zhang%', 或 age>25 ,或 work in ('it', 'hr', 'R&D')


。將其簡單化,結(jié)構(gòu)就變?yōu)锳 OP B。其中A代表變量,OP代表比較操作符,B代表值。

?A: 最簡單的A,應(yīng)該是/w+。考慮到實際情況,變量包含點號或脫字符,例如`table.salary`,可以記為/[/w.`]+/。這是比較籠統(tǒng)的細化。如果要求比較苛刻,還可以做到讓脫字符同時在左右兩邊出現(xiàn)(條件判斷)。
?OP: Where 常用的幾種關(guān)系比較為:=, <>, >, <, >=, <=, Between, Like, in。使用簡單的正則描述之,成為:/(?:[<>=]{1,2}|Between|Like|In)/i。
?B: B 的情況又可分為3種:變量,數(shù)字,字符串,列表。為簡單起見,這里就不考慮算術(shù)表達式了。

?變量的話,直接延用A的定義即可。不贅述。
?數(shù)字:使用//d+/來定義。不考慮小數(shù)和負數(shù)了。

?字符串:包括單引號字串和雙引號字串。中間可以包括被轉(zhuǎn)義的引號。我寫了一個符合這一要求的引號字串正則表達式,形如:/(['"])(?://['"]|[^//1])*?/1/。不過,由于它只是龐大機器的一個零件,這樣寫的風(fēng)險是極其大的。首先,它使用了反向引用;其次,該反向引用使用了全局的反向引用編號。我寫了自動生成全局編號的函數(shù),來解決這一問題。不過,這里談細節(jié)是不是太深入了。應(yīng)該先談框架,再說細節(jié)才對。不應(yīng)該一入手就陷進細節(jié)的汪洋大海。

?列表:列表是形如(1, 3 , 4) 或 ("it", "hr", "r&d")之類的東東,它由簡單變量以逗號相連,兩邊加上括號組成。列表的單項以I表示,它代表 數(shù)字|字符串。此時,列表就變?yōu)椋?/(I(?:,I)*?/)/。它表示,左括號,一個I,一系列由逗號、I組成的其它列表項(0個或多個),右括號。簡單起見沒有考慮空白字符。
?至此,可以總結(jié)出單條語句的正則框架:S =~ /A OP B/i。S在此代表單條語句。
更為復(fù)雜的是多條語句,可以由單條語句組成,中間使用 and 或 or 連接。合理地構(gòu)造單條語句,將其穩(wěn)定地編制為多條語句,任務(wù)就完成了。

沿用上面的示例,以S代表單條語句,那么復(fù)合語句C就是 C =~ S(?:(?:or|and) S)*?/。至此,一個初具規(guī)模的條件語句解析器就誕生了。下面以python為例,一步一步實現(xiàn)出來。

Python實現(xiàn)
重申一句:雖然給出了實現(xiàn),但是仍請注重思路,忽略代碼。

?

?

?


#!/usr/bin/python
# -*- coding: utf-8 -*-
#
#author: rex
#blog: http://iregex.org
#filename test.py
#created: 2010-08-06 17:12

#generage quoted string;
#including ' and " string
#allow /' and /" inside
index=0
def gen_quote_str():

global index
index+=1
char=chr(96+index)
return r"""(?P<quote_%s>['"])(?://['"]|[^'"])*?(?P=quote_%s)"""% (char, char)


#simple variable
def a():
return r'[/w.`]+'

#operators
def op():
return r'(?:[<>=]{1,2}|Between|Like|In)'


#list item within (,)
#eg: 'a', 23, a.b, "asdfasdf/"aasdf"
def item():
return r"(?:%s|%s)" % (a(), gen_quote_str())


#a complite list, like
#eg: (23, 24, 44), ("regex", "is", "good")
def items():
return r"""/( /s*
%s
(?:,/s* %s)* /s*
/)""" % (item(), item())

#simple comparison
#eg: a=15 , b>23
def s():
return r"""%s /s* %s /s* (?:/w+| %s | %s )""" % (a(), op(), gen_quote_str(), items())

#complex comparison
# name like 'zhang%' and age>23 and work in ("hr", "it", 'r&d')
def c():
return r"""
(?ix) %s
(?:/s*
(?:and|or)/s*
%s /s*
)*
""" % (s(), s())

print "A:/t", a()
print "OP:/t", op()
print "ITEM:/t", item()
print "ITEMS:/t", items()
print "S:/t", s()
print "C:/t", c()


該代碼在我的機器上(Ubuntu 10.04, Python 2.6.5)運行的結(jié)果是:

?

?

?


A: [/w.`]+
OP: (?:[<>=]{1,2}|Between|Like|In)
ITEM: (?:[/w.`]+|(?P<quote_a>['"])(?://['"]|[^'"])*?(?P=quote_a))
ITEMS: /( /s*
(?:[/w.`]+|(?P<quote_b>['"])(?://['"]|[^'"])*?(?P=quote_b))
(?:,/s* (?:[/w.`]+|(?P<quote_c>['"])(?://['"]|[^'"])*?(?P=quote_c)))* /s*
/)
S: [/w.`]+ /s* (?:[<>=]{1,2}|Between|Like|In) /s* (?:/w+| (?P<quote_d>['"])(?://['"]|[^'"])*?(?P=quote_d) | /( /s*
(?:[/w.`]+|(?P<quote_e>['"])(?://['"]|[^'"])*?(?P=quote_e))
(?:,/s* (?:[/w.`]+|(?P<quote_f>['"])(?://['"]|[^'"])*?(?P=quote_f)))* /s*
/) )
C:
(?ix) [/w.`]+ /s* (?:[<>=]{1,2}|Between|Like|In) /s* (?:/w+| (?P<quote_g>['"])(?://['"]|[^'"])*?(?P=quote_g) | /( /s*
(?:[/w.`]+|(?P<quote_h>['"])(?://['"]|[^'"])*?(?P=quote_h))
(?:,/s* (?:[/w.`]+|(?P<quote_i>['"])(?://['"]|[^'"])*?(?P=quote_i)))* /s*
/) )
(?:/s*
(?:and|or)/s*
[/w.`]+ /s* (?:[<>=]{1,2}|Between|Like|In) /s* (?:/w+| (?P<quote_j>['"])(?://['"]|[^'"])*?(?P=quote_j) | /( /s*
(?:[/w.`]+|(?P<quote_k>['"])(?://['"]|[^'"])*?(?P=quote_k))
(?:,/s* (?:[/w.`]+|(?P<quote_l>['"])(?://['"]|[^'"])*?(?P=quote_l)))* /s*
/) ) /s*
)*


請看匹配效果圖:



算術(shù)表達式

我記得剛才好像提到“為簡單起見,這里就不考慮算術(shù)表達式了”。不過,解析算術(shù)表達式是個非常有趣的話題,只要是算法書,都會提及(中綴表達式轉(zhuǎn)前綴表達式,諸如此類)。當然它也可以使用正則表達式來描述。

其主要思路是:

?

?

?

?

?


expr -> expr + term | expr - term | term
term -> term * factor | term / factor | factor
factor -> digit | ( expr )


以及代碼:

?

?

?


#!/usr/bin/python
# -*- coding: utf-8 -*-
#
#author: rex
#blog: http://jb51.net
#filename math.py
#created: 2010-08-07 00:44

integer=r"/d+"

factor=r"%s (?:/. %s)?" % (integer, integer)

term= "%s(?: /s* [*/] /s* %s)* " % (factor, factor)

expr= "(?x) %s(?: /s* [+-] /s* %s)* " % (term, term)

print expr


看一下它的輸出和匹配效果圖:


小貼士

?如果不用復(fù)雜的正則式就能解決問題,一定不要用。
?如果必須寫比較復(fù)雜的正則式,請參考以下原則。
?從大處著眼,先理解待解析的文本的整體結(jié)構(gòu)是什么樣子,劃分為小部件;
?從細處著手,試圖實現(xiàn)每一個小部件,力求每一部分都是完整、堅固的,且放在全局也不會沖突。
?合理組裝這些部件。
?分而治之的好處:只有某個模塊出錯,其它部分沒錯時,可以迅速定位錯誤,消除BUG。
?謹慎使用捕獲括號,除非你知道自己在做什么,知道它會有什么副作用,以及是否有可行的解決措施。對于短小的正則式來說,一兩個多余的括號是無傷大雅的;但是對于復(fù)雜的正則式來說,一對多余的括號可能就是致命的錯誤。
?盡量使用free-space模式。此時你可以自由地添加注釋和空白字符,以便提高正則表達式的可讀性。

以上就是小編為大家介紹關(guān)于構(gòu)造復(fù)雜正則表達式的方法 ,到類似問題的朋友不妨借鑒學(xué)習(xí)下,如果還有疑問,請在本文底部留言吧。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产精品99久| 7777免费精品视频| 国产老妇另类xxxxx| 国产一级视频在线观看| 在线视频观看91| 在线免费观看一区二区三区| 91久久在线播放| 久久人人爽人人爽人人片av高请| 51精品秘密在线观看| 亚洲精品国产成人久久av盗摄| 久久se这里有精品| 97人妻精品一区二区三区视频| 任我爽在线视频| 任你躁av一区二区三区| 久久久久高清| 91精品国产高清久久久久久| 一区二区中文字幕| 欧美一级一区二区| 亚洲高清三级视频| 中文字幕亚洲一区二区av在线| 久久国内精品自在自线400部| 国产精品无码在线播放| 国产在线视频二区| 日本一二区免费| 亚洲国产精品一区二区第四页av| 国产爆乳无码一区二区麻豆| 国产中文字幕一区| 国产女主播福利| 精品少妇久久久| www色com| 女~淫辱の触手3d动漫| 巨乳女教师的诱惑| 在线观看亚洲色图| caopor在线视频| 欧美日韩亚洲一区二区三区在线观看| 欧美巨猛xxxx猛交黑人97人| 日韩精品黄色网| 色综合久久中文字幕| 国产日韩精品久久久| 日本特黄久久久高潮| 欧美成人精品欧美一级私黄| 韩国三级与黑人| 青青视频在线播放| 免费看a级黄色片| 亚洲资源在线网| 少妇免费毛片久久久久久久久| 成人欧美视频在线| 国产私拍一区| 欧洲一区二区在线观看| 欧美日韩在线一区二区三区| 日韩一区二区电影在线观看| 日本一区二区三区四区高清视频 | 国产精品亚洲第一区在线暖暖韩国| 手机在线观看毛片| 激情综合色综合久久| 不卡一区二区在线| 亚洲男人的天堂一区二区| 亚洲精品美国一| 亚洲成人av福利| 在线观看国产91| 日韩欧美精品三级| 亚洲一区第一页| 久久亚洲电影天堂| 97在线免费视频| 国产欧美日韩中文字幕在线| 国产成人精品自拍| 亚洲欧美日韩在线综合| 色一情一乱一伦一区二区三区| 手机在线视频你懂的| 亚洲 欧美 日韩 国产综合 在线| 日本www.色| 国产伦精品一区二区三区88av| 国产精品久久久久无码av色戒| 在线观看免费av网址| jizz欧美性20| 日韩精品无码一区二区| 国产成人av免费看| 国产一区二区三区黄视频 | 欧美国产一级片| 日本高清视频网站| 精品一二线国产| 国产精品美女久久久久久2018| 色婷婷国产精品| 亚洲国产欧美精品| 久久青草福利网站| 久久精品日产第一区二区三区精品版| 青青视频免费在线| 狠狠操精品视频| 国产免费无码一区二区视频| 精品国产18久久久久久| 国产大陆a不卡| 亚洲va在线va天堂| 亚洲精品小视频| 国产精品福利观看| 在线免费观看成人网| av亚洲天堂网| 日本丰满少妇裸体自慰| 国产精品伦一区二区三区| 成人一区二区视频| 日本道色综合久久| 久久夜色撩人精品| 精品乱色一区二区中文字幕| 日本黄色三级大片| 在线视频 日韩| 日韩一卡二卡在线观看| www.久久久久久久| 国产一区二区福利| 色久综合一二码| 美女扒开尿口让男人操亚洲视频网站| 国产精品视频福利| 欧美激情国产精品日韩| 九九热视频在线免费观看| 天堂在线观看免费视频| 成人免费一区二区三区在线观看| 精品视频偷偷看在线观看| 国产成人短视频| 欧美在线一区视频| 日韩影院一区二区| 精品中文字幕一区二区小辣椒| 亚洲成人在线网站| 久久噜噜噜精品国产亚洲综合| 最近日韩中文字幕中文| 免费精品视频一区二区三区| 中国黄色片视频| 精品久久在线观看| 亚洲综合精品自拍| 国产做受高潮69| 日本男女交配视频| 日本少妇毛茸茸高潮| 国产主播av在线| 精品一区二区三区在线播放 | 一区二区视频免费| 久久综合资源网| 国产视频精品自拍| 五月天亚洲综合小说网| 小嫩苞一区二区三区| 丁香婷婷深情五月亚洲| 亚洲成人精品av| 欧美性bbwbbwbbwhd| 一本一本久久a久久| www..com久久爱| 日韩中文字幕在线播放| 日本男女交配视频| 亚洲中文字幕一区二区| 午夜国产不卡在线观看视频| 国产激情久久久| 欧美一级小视频| 日韩肉感妇bbwbbwbbw| 国产美女免费视频| 欧美日韩成人综合在线一区二区| 91亚洲精品丁香在线观看| 黄瓜视频污在线观看| 成人午夜伦理影院| 久久亚洲精品毛片| www.99r| 日韩高清不卡一区| 亚洲视频在线视频| 116极品美女午夜一级| 手机看片福利在线| 日韩精品免费在线视频| 久久天天东北熟女毛茸茸| 96亚洲精品久久久蜜桃| 在线电影院国产精品| 亚洲最新免费视频| 国产不卡精品视频| 亚洲精品自在久久| 99热成人精品热久久66| 日韩av电影天堂| 日韩中文字幕网站| 97中文字幕在线观看| av影院午夜一区| 国产精品久久久久久久av电影| 无码 人妻 在线 视频| 国产精品色婷婷| www.成人av.com| 国产成人精品a视频一区| 色伊人久久综合中文字幕| 日韩videos| 99久久久久久久| 国产一区二区精品丝袜| www.欧美com| 国产精品毛片高清在线完整版| 91中文字幕在线观看| 亚洲一区 视频| 777奇米成人网| 精品一区二区中文字幕| 国产一区二区在线观看免费| 久久久综合av| 青青草免费av| 欧美美女一区二区三区| 国产精品免费看久久久无码| 美女视频黄免费的久久 | 亚洲天堂av片| 精品嫩草影院久久| 污免费在线观看| 亚洲天堂成人在线观看| 日韩欧美手机在线| 日本三级亚洲精品| 欧美在线视频a| 福利一区二区三区四区| 精品日产卡一卡二卡麻豆| 嫩草影院国产精品| 国产精品乱码一区二区三区软件 | 国产一区二区三区在线| 国产精品嫩草69影院| 亚洲日本va在线观看| 一区二区精品在线| 久久se精品一区精品二区| 国产精品免费久久久久久| 天天爽夜夜爽人人爽| 有码中文亚洲精品| 亚洲天堂精品一区| 欧美大肚乱孕交hd孕妇| zjzjzjzjzj亚洲女人| 天天色天天操综合| 国产真实乱子伦| 亚洲欧美另类小说| 欧美日韩性生活片| 日本一区二区免费在线| 在线综合视频网站| 91一区在线观看| 少妇免费毛片久久久久久久久| 精品伊人久久久久7777人| av在线不卡观看| 久久精品免费观看| 国产精品区免费视频| 蜜臀av一区二区三区| 国产厕所精品在线观看| 久久激情五月婷婷| 久久精品日韩| 国产精品18久久久久久久久| 久久综合一区| 国产精品夜夜嗨| 神马欧美一区二区| 久久久不卡网国产精品二区| 亚洲免费视频播放| 国产欧美一区二区精品仙草咪| 亚洲区免费影片| 国产肥白大熟妇bbbb视频| 日韩小视频在线观看专区| 女尊高h男高潮呻吟| 精品少妇一区二区三区日产乱码| 国产麻豆天美果冻无码视频 | 国产国语老龄妇女a片| 欧美日韩一本到| 大黑人交xxx极品hd| 日韩欧美国产三级电影视频| 国产高清一区二区三区四区| 亚洲男人的天堂在线| 国内偷拍精品视频| 欧美区二区三区| 国产人妖一区二区| 国产99在线免费| aa级大片欧美| 无码人妻精品一区二区三区66| 在线观看网站黄不卡| 国产制服丝袜在线| 日韩午夜在线视频| 99热这里只有精品在线| 国产成人精品一区二区三区福利| www.日韩精品| 中文字幕一区二区三区四区在线视频| 欧美午夜xxx| 91成人在线免费视频| www.国产一区| 亚洲奶汁xxxx哺乳期| 欧美激情www| 亚洲色图在线看| 日本黄色录像片| 久久精品成人欧美大片古装| www.中文字幕| 区一区二区三区中文字幕| 国产精品美女视频| 国产又黄又粗又猛又爽的视频 | 久久夜色精品国产欧美乱| 国产精品乱码久久久| 国产一区二区免费在线观看| 久久欧美一区二区| 久久精品一二三四| 在线视频欧美日韩精品| 天堂在线资源8| 久久视频免费在线| 欧美人狂配大交3d怪物一区| 美日韩一二三区| 国产在线播放一区二区| 亚洲天堂免费看| 美国精品一区二区| 国产综合色香蕉精品| 久久网站热最新地址| 男人网站在线观看| 欧美激情2020午夜免费观看| 久久er99热精品一区二区| 999精品视频在线| 国产亚洲精品综合一区91| 欧美在线精品一区二区三区| 成年人深夜视频| 欧美成人性福生活免费看| 亚洲图片中文字幕| 四虎永久免费网站| 日韩一级完整毛片| 国产剧情久久久| 男女爱爱视频网站| 日韩精品亚洲精品| 亚洲色图欧美视频| 亚洲 欧美 日韩系列| 久热99视频在线观看| 成人免费视频一区二区| 久草免费资源站| 国产99久久精品一区二区| 国产视频视频一区| 91av手机在线| 久久大片网站| 欧美性猛片aaaaaaa做受| 中文字幕乱伦视频| 国产尤物av一区二区三区| 亚洲精品美女在线观看| 日本不卡视频在线观看| 亚洲18在线看污www麻豆| 国产+人+亚洲| 亚洲欧美欧美一区二区三区| 国产精久久久久久| 手机看片日韩国产| 亚洲色图15p| 成人aa视频在线观看| 欧美成人短视频| 免费在线观看一区二区| 日韩欧美国产午夜精品| 久久国产精品露脸对白| 色哟哟视频在线| 51国偷自产一区二区三区的来源| 精品日本美女福利在线观看| 国产伦精品一区二区三区免.费| 国产一区二区视频播放| 九色精品美女在线| 亚洲人成在线播放网站岛国| 无码人妻精品一区二区50| 欧美狂野激情性xxxx在线观| 中文字幕国产亚洲| 久久久99久久| 日本视频网站在线观看| 九色在线视频观看| 韩国三级电影久久久久久| 一区二区三区四区蜜桃| 中文字幕乱码视频| 亚洲激情在线观看视频| 国产精品大片wwwwww| 欧美性xxxx极品hd满灌| 老司机午夜精品视频| av小说在线观看| 日韩午夜视频在线观看| 成人黄色在线网站| 欧美精品色哟哟| 日韩精品久久一区二区| 久久青草福利网站| 在线观看区一区二| 韩国欧美一区二区| 日韩女优一区二区| 草草草视频在线观看| 4388成人网| 欧美日韩国产区一| 国产一区二区三区四区五区入口 | 三级性生活视频| 91精品国产综合久久久久久丝袜 | 久久一二三四| 国产麻豆a毛片| 国产成人无码a区在线观看视频| 97久久久久久| 欧美欧美午夜aⅴ在线观看| 成人免费av在线| 中国a一片一级一片| 制服丝袜av在线| 天天做天天爱天天高潮| 久久久综合免费视频| 7777女厕盗摄久久久| 久久亚洲精品小早川怜子| 波多野结衣爱爱| 无码人妻aⅴ一区二区三区| 免费观看黄色的网站| 国产精品第七影院| 亚洲欧美视频在线| 欧美日韩午夜视频在线观看| 国产米奇在线777精品观看| 高清乱码免费看污| 欲求不满的岳中文字幕| ijzzijzzij亚洲大全| 国产精品2018| 亚洲欧美综合精品久久成人| 精品国产91久久久久久老师| 国产丶欧美丶日本不卡视频| 国产丝袜在线视频| 日韩视频中文字幕在线观看| 国产成人黄色网址| 欧美在线日韩精品| 国产精品第二页| 日韩一二三在线视频播| 91传媒视频在线播放| 国产性色一区二区| 精品一区二区三区香蕉蜜桃 | 国产成人av在线| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 岛国av免费在线| 亚洲不卡1区| 91精品久久久久久久久久入口| 日韩高清不卡av| 欧美亚洲尤物久久| 亚洲免费在线看| 久久网站最新地址| 国产高清精品久久久久| 少妇高潮一区二区三区69| 午夜一级黄色片|