日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式的顺序优先级

發布時間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式的顺序优先级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

假設存在匹配示例:匹配a-c@或a@

你認為正則a|(a-c)(?=\W)與(a-c)|a(?=\W)都能匹配上面的示例嗎?這2個正則有什么本質區別?哪一個才是正確的寫法?--這就涉及了正則表達式的順序優先級,本文將解釋這一點。

什么是正則表達式的順序優先級呢?在正則表達式中,| 前后的表達式的順序是有講究的,如expression1|expression2和expression2|expression1匹配的結果或許存在不同,在編輯正則表達式時要有這樣意識,否則編輯出的正則可能不符需求。

?

舉例說明

示例1

源字符串:

a-c@ ?

a@

正則表達式:

a|(a-c)(?=\W)

(a-c)|a(?=\W)

?

匹配結果:a|(a-c)(?=\W)能夠匹配a@,但不能匹配a-c@;(a-c)|a(?=\W)則都可以匹配。

原因:(a-c)|a(?=\W)先匹配a-c這個整體,如果匹配失敗則進行回溯,嘗試匹配a,所以@前的a-c或a都是可匹配的;a|(a-c)(?=\W)能夠匹配a@自不必說,但為什么不能匹配a-c@呢?因為它匹配a,剩下-c@,-匹配(?=\W)成功,整個正則匹配成功,匹配結果為:a

?

示例2

源字符串:

1

01

11

正則表達式:

(0?[123456789]|(1[012]))

((1[012])|0?[123456789])

?

匹配結果:(0?[123456789]|(1[012]))可匹配1與01,不可匹配11;((1[012])|0?[123456789])可匹配所有的源字符串。

原因:同示例1。

?

小結

如本文開頭所問,a|(a-c)(?=\W)與(a-c)|a(?=\W)的本質區別--后者的匹配廣度高于前者,所以(a-c)|a(?=\W)才是符合需求的。

?

轉載于:https://www.cnblogs.com/wql025/p/5366911.html

總結

以上是生活随笔為你收集整理的正则表达式的顺序优先级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。