乙個正規表示式的例子

2021-05-17 13:44:42 字數 1472 閱讀 5264

需求:通過.net的正則

上面3個都得到 aa

並對語句稍微講解一下。謝謝。

(? <=http://)(/w+) 這個是我寫的。不知道怎麼加上或者匹配www

還有? <= 這個什麼意思查不到。

解決:

(?i) 匹配模式,表示忽略大小寫,在.net中等價於在後面加regexoptions.ignorecase引數

(? <=^|http://(?:www/.)?) 肯定逆序環視,語法(? <=exp),最終匹配到的只是乙個位置,相當於在所在位置的左側附加了乙個條件,表示所在位置左側必須能夠匹配exp

用在這裡就表示左側必須是字串開始位置^,或者以http://(?:www/.)?開頭,其中www.可有可無

(?!www/.) 否定順序環視,語法(?!exp),同上,匹配的只是乙個位置,相當於在所在位置的右側附加乙個條件,表示所在位置右側必須不能匹配exp

用在這裡是因為前面的www.是可有可無的,如果不加這個條件限定,那麼最後乙個例子

將會匹配到www

在正規表示式嘗試匹配到http://後的位置時,條件(? <=^|http://(?:www/.)?)中www.是可有可無的,所以也是滿足的,這樣後面的/b/w+就會匹配到www.,所以要加(?!www/.)這樣乙個條件,使這個位置的右側不能是www.

/b/w+ /b單詞邊界,/w相當於[a-za-z0-9_]

/b限定取到的內容是開始位置,或:,或.與.之間完整的內容,而不是部分子串

還是最後的那個例了

前面(? <=^|http://(?:www/.)?)(?!www/.)的條件限定,使得http://w以前的位置都不符合條件,在第乙個w後的位置是滿足以上條件的,如果這裡不用/b限制,則/w+就可以匹配到ww,這個結果顯然是錯誤的

網域名稱的通用規則是a-za-z0-9_組成,其實還有乙個「-」,/w在.net中如果沒有加regexoptions.ecmascript引數,那麼還可以匹配一些本地字符集,如中文,全形數字等,所以用在這裡並不是很合適,可以把表示式中的/w替換為[a-za-z0-9_-]

(?!/./w+$) 這個條件主要是用來限定右側不能只有乙個.com之類的域我,也就是要排除www.bb.com這種網域名稱

(?=(?:/./w+)+) 這個條件主要是用來限定右側要符合多個./w+這樣的規則,如果能保證傳過來的引數符合網域名稱規則,這個條件可以去掉

關於環視,可以參考一下我的部落格,目前只寫了幾篇,後續會陸續增加

正則基礎之——環視

lxcnn

乙個例子學會正規表示式

文章以oc為例,正規表示式不分語言,文章中的規則在別的語言也是通用的。最近有個需求是在字串中匹配出特殊的字串,格式是暱稱 我寫出來的正則如下 nsstring regex 一步一步分析,前半段格式是固定的為 在ios裡需要轉義,所以多乙個 這樣,同理也就寫出了user id限制是32位 然後是暱稱,...

Ruby正規表示式的乙個例子

ruby基礎教程 programming 第四版 這本書的第十六章正規表示式類中有乙個例子讓人不是那麼容易理解。特此分享一下我的理解。16.5 捕獲 d d 123456 p 1 1 p 2 45 p 3 6 此例子中的p 2 45結果讓人有點難以理解,因為大家都會認為結果應該是23才對,其實不然。...

正規表示式例子

前言 regular expressions 正規表示式,以下用re稱呼 對小弟來說一直都是神密的地帶,看到一些網路上的大大,簡單用re就決解了某些文字的問題,小弟便興起了學一學re的想法,但小弟天生就比較懶一些,總希望看有沒有些快速學習的方式,於是小弟又請出google大神,借由祂的神力,小弟在網...