亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

正則表達式不包含屬性

2020-03-16 21:18:33
字體:
來源:轉載
供稿:網友
一個標簽里不包含某個屬性 的 正則表達式的寫法
 
 
找出所有img標簽的,沒有帶說明屬性alt的標簽: 

正則:<img(?![^<>]*?alt[^<>]*?>).*?> 
例子:<img src="" alt=""> <img src="" >  <img src="" title="">  <img src="" id="">  <img src=""  title="" alt=""> 


擴展,如果要找沒有帶title屬性的a應該是: 

正則:<a(?![^<>]*?title[^<>]*?>).*?> 
例子:<a src="" alt=""> <a src="" >  <a src="" title="">  <a src="" id="">  <a src=""  title="" alt=""> 
用正則表達式找出不包含連續字符串abc的單詞 

[^abc]表示不包含a、b、c中任意字符, 我想實現不包含字符串abc應該如何寫表達式? 

就我自己而言,這個問題最簡單的解決方法是使用編程語言的配合,找出那些包含abc的,剩下的就是不包含的了——懶人的風格。但我寫的是教程,讀者未必都有編程的基礎,有些只是使用一些工具從txt文檔中抽取出一些信息,所以要回答還是必須完全通過正則表達式來完成。 

于是打開了RegexTester,開始試驗,先是試了使用((?'test'abc)|.)*(?(test)(?!))(含意是:查找abc,或任意的字符,如果找到了abc,就把它存入命名為test的組里,到最后檢查test組里是否有內容,如果有就匹配失敗,相關說明見教程),結果是"abc","aabc","abcd","aa"都能通過測試,看來是到最后測試到test組存在后又回溯了,此解決方案不可行。 

然后又試了(.(?!abc))*(找出所有后面不是abc的字符),結果是"abc","abcd"通過測試,"aabc"則只截取了后面的"abc",顯然不行。 

那加強條件試試:((?<!abc).(?!abc))*(找出所有前面和后面都不是abc的字符),結果是所有包含abc的字符串都只截取了里面的"abc",不包含abc的則直接通過。 

現在看來有點戲了,但是怎么把那些內部包含abc的字符串過濾掉呢?這個問題換句話說也就是怎么匹配整體而不是部分呢?現在需要明確用戶的需求了:如果用戶想要找的是單詞,那就在表達式的兩端加上/b,如果要找的是行,就加上^和$。由于用戶的問題沒有明確說明,我就當作是單詞吧。 

于是等到了這樣的表達式:/b((?<!abc).(?!abc))*/b,經過測試,這個表達式能匹配所有不包含abc的單詞,以及單詞abc。 

怎么排除單詞abc?經過一番思考,最后我認為判斷單詞是否以a開頭的方式最為方便:/b(a(?!bc)|[^a](?!abc))((?<!abc).(?!abc))*/b(要么以后面不是bc的a開頭,要么不以a開頭,除了開頭后面所有的字符必須前面和后面都不是abc)。經過測試,完全滿足要求,Bingo! 

使用正則表達式查找不包含連續字符串abc的單詞,最終結果:/b(a(?!bc)|[^a](?!abc))((?<!abc).(?!abc))*/b 
---------------- 
更新:根據maple的評論,更簡潔的作法是:/b((?!abc)/w)+/b 

正則表達式-不包含某個字符串

在使用正則表達式的場合,常常有這種需求,就是匹配一個不包含某個子串的子符串。比如說,我要從“eabcdfgh”得到"cd"之前的子串。有些人可能會寫:

([^cd]*)

這種寫法是徹底錯誤的,因為[]中的是集合,也就是說,[^cd]表示不等于c或者d,而不是cd。下面的程序中沒有cd,但eab還是被匹配出來了。

復制代碼代碼如下:

String s = "([^cd]*)";  
Match m = Regex.Match("eabcfgh", s);  
MessageBox.Show(m.Value);//eab  
MessageBox.Show(m.Groups[1].Value);//eab 

 

上面這種寫法是錯的比較離譜的,正常青年一般都可以避免這種錯誤。在特殊情況下,正則表達式可以這么寫,而且效率是比較高的。

([/s/S]*cd)

先說明下/s/S是表示匹配任何字符。所謂特殊情況,就是我知道這個字符串中必有cd的存在。假如,我的要求是匹配不包含cd的部分(為了描述方便,只匹配cd之前的部分),也就是說,當cd不存在時,應該把整個字符串都取出來。

復制代碼代碼如下:

String s = "((.(?!cd))*.)";  
//String s = "([/s/S]*cd)";  
Match m = Regex.Match("eabcdfgh", s);  
MessageBox.Show(m.Value);//eab  
MessageBox.Show(m.Groups[1].Value);//eab 

 

這種寫法終于符合要求了。不過值得一提的是,相較前一種而言,它的效率比較低。
回顧一下相關的語法:
(?:子表達式)         定義非捕獲組。

復制代碼代碼如下:

//定義非捕獲組  
String s = "e(?:ab)(.*)";  
Match m = Regex.Match("eabcd", s);  
MessageBox.Show(m.Value);//eabcd  
MessageBox.Show(m.Groups[1].Value);//cd 

 

ab是被匹配的,但是它所在的組沒有被捕獲,Group[1]是cd

(?=子表達式)       零寬度正預測先行斷言。

復制代碼代碼如下:

//零寬度正預測先行斷言  
//String s = "b(cd|de)(.*)";  
String s = "b(?=cd|de)(.*)";  
Match m = Regex.Match("eabcdfg", s);  
MessageBox.Show(m.Value);  
MessageBox.Show(m.Groups[1].Value);//區別 cd  cdfg 

 

這種寫法和注釋掉的寫法是有區別的,區別就是“零寬度”,這種寫法會被捕獲,也就是不占一個Group。

(?!子表達式)       零寬度負預測先行斷言。

!表示非,就是不包含,同樣是零寬度,不會被捕獲。

(?<=子表達式)    零寬度正回顧后發斷言。

例:(?<=19)/d{2}/b

“1851 1999 1950 1905 2003”中的“99”、“50”和“05”

(?<!子表達式)     零寬度負回顧后發斷言。

例:(?<!19)/d{2}/b

“1851 1999 1950 1905 2003”中的“51”和“03”


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品色午夜在线观看| 日韩欧美国产高清91| 亚洲日本欧美日韩高观看| 2019中文字幕在线| 午夜精品www| 国产精品成人aaaaa网站| 中文字幕日本精品| 精品国产鲁一鲁一区二区张丽| 色哟哟网站入口亚洲精品| 精品国产电影一区| 国产精品久久99久久| 国产精品日韩电影| 亚洲自拍偷拍一区| 国产精品久久久久秋霞鲁丝| 亚洲激情视频网站| 国产精品久久久久国产a级| 69av在线播放| 久久亚洲精品网站| 久久99精品久久久久久青青91| 亚洲成人激情在线| 成人444kkkk在线观看| 亚洲色图激情小说| 欧美野外猛男的大粗鳮| 久久99久久99精品免观看粉嫩| 日韩有码在线视频| 日韩的一区二区| 日韩国产欧美精品在线| 久久精品国产久精国产一老狼| 在线电影中文日韩| 欧美激情videoshd| 色综合久久天天综线观看| 欧美韩国理论所午夜片917电影| 91九色国产在线| 国产91在线播放九色快色| 日韩福利视频在线观看| www欧美xxxx| 亚洲偷欧美偷国内偷| 欧美成人中文字幕| 亚洲电影在线观看| 国产精品91在线观看| 成人啪啪免费看| 在线观看日韩欧美| 国产精品99久久久久久人| 亚洲天堂av在线播放| 欧美乱人伦中文字幕在线| 国产+成+人+亚洲欧洲| 日本精品一区二区三区在线播放视频| 最近中文字幕日韩精品| 性欧美亚洲xxxx乳在线观看| 久久综合色影院| 国产三级精品网站| 亚洲综合国产精品| 国产亚洲一区二区在线| 98午夜经典影视| 国产精品日日做人人爱| 国产精品a久久久久久| 国产精品第一页在线| 91亚洲精品久久久久久久久久久久| 亚洲影院高清在线| 国产日本欧美在线观看| 亚洲视频欧美视频| 亚洲高清不卡av| 国外视频精品毛片| 欧美噜噜久久久xxx| 国产mv免费观看入口亚洲| 亚洲人成人99网站| 久久久精品日本| 91香蕉亚洲精品| 性视频1819p久久| 日韩视频永久免费观看| 日韩中文字幕网站| 国产日韩精品一区二区| 这里只有精品在线观看| 国产精品都在这里| 亚洲天堂日韩电影| 九九热这里只有在线精品视| 成人av在线天堂| 日韩电影在线观看中文字幕| 97涩涩爰在线观看亚洲| 欧美与黑人午夜性猛交久久久| 国产精品极品在线| 久久黄色av网站| 久久亚洲成人精品| 少妇高潮久久久久久潘金莲| 国产一区二区在线免费视频| 亚洲第一福利网| 亚洲欧美精品一区二区| 中文字幕亚洲综合久久| 欧美日韩xxxxx| 国产精品观看在线亚洲人成网| 日韩欧美国产一区二区| 国外成人在线播放| 欧美老女人性生活| 国产精品丝袜一区二区三区| 日韩在线观看网站| 一区二区三区四区在线观看视频| 国产精品免费小视频| 亚洲男人天堂2019| 在线亚洲欧美视频| 成人黄色在线观看| 日韩黄色高清视频| 久久男人资源视频| 一级做a爰片久久毛片美女图片| 国产成人精品在线| 91精品久久久久久久久久久久久久| 日韩美女写真福利在线观看| 精品亚洲一区二区三区四区五区| 欧美成人高清视频| 亚洲自拍偷拍视频| 日韩最新av在线| 国产欧美最新羞羞视频在线观看| 国产精品爽爽爽爽爽爽在线观看| 欧洲精品毛片网站| 国内精品视频一区| 亚洲剧情一区二区| 国产欧美精品久久久| 久久天天躁狠狠躁夜夜av| 亚洲国产精品久久91精品| 91亚洲精华国产精华| 91国内揄拍国内精品对白| 久久色免费在线视频| 日本亚洲欧美成人| 岛国精品视频在线播放| 成人亚洲激情网| 久久夜色精品国产欧美乱| 91久久精品国产91性色| 国产精品对白刺激| 成人在线视频网| 欧美性猛交xxxxx水多| 国产成人在线亚洲欧美| 久久99精品久久久久久噜噜| 秋霞av国产精品一区| 国产精品久久久久久久久久小说| 欧美大秀在线观看| 欧美性色19p| 欧美尺度大的性做爰视频| 91高清免费视频| 日韩中文字幕网址| 亚洲国产欧美自拍| 亚洲精品av在线| 国产成人精品久久二区二区| 国产精品永久免费在线| 欧美成人午夜激情视频| 亚洲精品成人免费| 欧美日韩在线视频一区| 97婷婷大伊香蕉精品视频| 精品国产一区二区在线| 国内成人精品视频| 亚洲欧美制服丝袜| 亚洲成人激情在线| 91久久国产婷婷一区二区| 精品视频偷偷看在线观看| 91精品免费久久久久久久久| 欧美久久精品午夜青青大伊人| 黄色精品在线看| 最近更新的2019中文字幕| 伊人久久五月天| 久久免费在线观看| 国产精品美女呻吟| 欧美精品18videos性欧美| 国内成人精品一区| 日韩亚洲欧美中文高清在线| 少妇精69xxtheporn| 欧美激情精品久久久久久蜜臀|