中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁 > 知識庫 > 正則表達式之 貪婪與非貪婪模式詳解(概述)

正則表達式之 貪婪與非貪婪模式詳解(概述)

熱門標簽:浙江營銷外呼系統有哪些 哈爾濱公司外呼系統代理 惠安地圖標注 山東外呼系統聯系方式 自己做的電銷機器人 上海銷售電銷機器人軟件 遼寧秒客來電話機器人 地圖標注店鋪地圖標注酒店 淄博市張店區地圖標注
1 概述
貪婪與非貪婪模式影響的是被量詞修飾的子表達式的匹配行為,貪婪模式在整個表達式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表達式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分NFA引擎所支持。

屬于貪婪模式的量詞,也叫做匹配優先量詞,包括:

“{m,n}”、“{m,}”、“?”、“*”和“+”。

在一些使用NFA引擎的語言中,在匹配優先量詞后加上“?”,即變成屬于非貪婪模式的量詞,也叫做忽略優先量詞,包括:

“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。

從正則語法的角度來講,被匹配優先量詞修飾的子表達式使用的就是貪婪模式,如“(Expression)+”;被忽略優先量詞修飾的子表達式使用的就是非貪婪模式,如“(Expression)+?”。

對于貪婪模式,各種文檔的叫法基本一致,但是對于非貪婪模式,有的叫懶惰模式或惰性模式,有的叫勉強模式,其實叫什么無所謂,只要掌握原理和用法,能夠運用自如也就是了。個人習慣使用貪婪與非貪婪的叫法,所以文中都會使用這種叫法進行介紹。

2 貪婪與非貪婪模式匹配原理
對于貪婪與非貪婪模式,可以從應用和原理兩個角度進行理解,但如果想真正掌握,還是要從匹配原理來理解的。

先從應用的角度,回答一下“什么是貪婪與非貪婪模式?”

2.1 從應用角度分析貪婪與非貪婪模式
2.1.1 什么是貪婪與非貪婪模式
先看一個例子

舉例:

源字符串:aadiv>test1/div>bbdiv>test2/div>cc

正則表達式一:div>.*/div>

匹配結果一:div>test1/div>bbdiv>test2/div>

正則表達式二:div>.*?/div>

匹配結果二:div>test1/div>(這里指的是一次匹配結果,所以沒包括div>test2/div>)

根據上面的例子,從匹配行為上分析一下,什是貪婪與非貪婪模式。

正則表達式一采用的是貪婪模式,在匹配到第一個“/div>”時已經可以使整個表達式匹配成功,但是由于采用的是貪婪模式,所以仍然要向右嘗試匹配,查看是否還有更長的可以成功匹配的子串,匹配到第二個“/div>”后,向右再沒有可以成功匹配的子串,匹配結束,匹配結果為“div>test1/div>bbdiv>test2/div>”。當然,實際的匹配過程并不是這樣的,后面的匹配原理會詳細介紹。

僅從應用角度分析,可以這樣認為,貪婪模式,就是在整個表達式匹配成功的前提下,盡可能多的匹配,也就是所謂的“貪婪”,通俗點講,就是看到想要的,有多少就撿多少,除非再也沒有想要的了。

正則表達式二采用的是非貪婪模式,在匹配到第一個“/div>”時使整個表達式匹配成功,由于采用的是非貪婪模式,所以結束匹配,不再向右嘗試,匹配結果為“div>test1/div>”。

僅從應用角度分析,可以這樣認為,非貪婪模式,就是在整個表達式匹配成功的前提下,盡可能少的匹配,也就是所謂的“非貪婪”,通俗點講,就是找到一個想要的撿起來就行了,至于還有沒有沒撿的就不管了。

2.1.2 關于前提條件的說明
在上面從應用角度分析貪婪與非貪婪模式時,一直提到的一個前提條件就是“整個表達式匹配成功”,為什么要強調這個前提,我們看下下面的例子。

正則表達式三:div>.*/div>bb

匹配結果三:div>test1/div>bb

修飾“.”的仍然是匹配優先量詞“*”,所以這里還是貪婪模式,前面的“div>.*/div>”仍然可以匹配到“div>test1/div>bbdiv>test2/div>”,但是由于后面的“bb”無法匹配成功,這時“div>.*/div>”必須讓出已匹配的“bbdiv>test2/div>”,以使整個表達式匹配成功。這時整個表達式匹配的結果為“div>test1/div>bb”,“div>.*/div>”匹配的內容為“div>test1/div>”。可以看到,在“整個表達式匹配成功”的前提下,貪婪模式才真正的影響著子表達式的匹配行為,如果整個表達式匹配失敗,貪婪模式只會影響匹配過程,對匹配結果的影響無從談起。

非貪婪模式也存在同樣的問題,來看下面的例子。

正則表達式四:div>.*?/div>cc

匹配結果四:div>test1/div>bbdiv>test2/div>cc

這里采用的是非貪婪模式,前面的“div>.*?/div>”仍然是匹配到“div>test1/div>”為止,此時后面的“cc”無法匹配成功,要求“div>.*?/div>”必須繼續向右嘗試匹配,直到匹配內容為“div>test1/div>bbdiv>test2/div>”時,后面的“cc”才能匹配成功,整個表達式匹配成功,匹配的內容為“div>test1/div>bbdiv>test2/div>cc”,其中“div>.*?/div>”匹配的內容為“div>test1/div>bbdiv>test2/div>”。可以看到,在“整個表達式匹配成功”的前提下,非貪婪模式才真正的影響著子表達式的匹配行為,如果整個表達式匹配失敗,非貪婪模式無法影響子表達式的匹配行為。

2.1.3 貪婪還是非貪婪——應用的抉擇
通過應用角度的分析,已基本了解了貪婪與非貪婪模式的特性,那么在實際應用中,究竟是選擇貪婪模式,還是非貪婪模式呢,這要根據需求來確定。

對于一些簡單的需求,比如源字符為“aadiv>test1/div>bb”,那么取得div標簽,使用貪婪與非貪婪模式都可以取得想要的結果,使用哪一種或許關系不大。

但是就2.1.1中的例子來說,實際應用中,一般一次只需要取得一個配對出現的div標簽,也就是非貪婪模式匹配到的內容,貪婪模式所匹配到的內容通常并不是我們所需要的。

那為什么還要有貪婪模式的存在呢,從應用角度很難給出滿意的解答了,這就需要從匹配原理的角度去分析貪婪與非貪婪模式。

2.2 從匹配原理角度分析貪婪與非貪婪模式
如果想真正了解什么是貪婪模式,什么是非貪婪模式,分別在什么情況下使用,各自的效率如何,那就不能僅僅從應用角度分析,而要充分了解貪婪與非貪婪模式的匹配原理。

2.2.1 從基本匹配原理談起
NFA引擎基本匹配原理參考:正則基礎之——NFA引擎匹配原理。

這里主要針對貪婪與非貪婪模式涉及到的匹配原理進行介紹。先看一下貪婪模式簡單的匹配過程。

源字符串:"Regex"

正則表達式:".*"


圖2-1

注:為了能夠看清晰匹配過程,上面的空隙留得較大,實際源字符串為“”Regex””,下同。

來看一下匹配過程。首先由第一個“"”取得控制權,匹配位置0位的“"”,匹配成功,控制權交給“.*”。

“.*”取得控制權后,由于“*”是匹配優先量詞,在可匹配可不匹配的情況下,優先嘗試匹配。從位置1處的“R”開始嘗試匹配,匹配成功,繼續向右匹配,匹配位置2處的“e”,匹配成功,繼續向右匹配,直到匹配到結尾的“””,匹配成功,由于此時已匹配到字符串的結尾,所以“.*”結束匹配,將控制權交給正則表達式最后的“"”。

“"”取得控制權后,由于已經在字符串結束位置,匹配失敗,向前查找可供回溯的狀態,控制權交給“.*”,由“.*”讓出一個字符,也就是字符串結尾處的“””,再把控制權交給正則表達式最后的“"”,由“"”匹配字符串結尾處的“"”,匹配成功。

此時整個正則表達式匹配成功,其中“.*”匹配的內容為“Regex”,匹配過程中進行了一次回溯。

接下來看一下非貪婪模式簡單的匹配過程。

源字符串:"Regex"

正則表達式:".*?"




圖2-2

看一下非貪婪模式的匹配過程。首先由第一個“"”取得控制權,匹配位置0位的“"”,匹配成功,控制權交給“.*?”。

“.*?”取得控制權后,由于“*?”是忽略優先量詞,在可匹配可不匹配的情況下,優先嘗試不匹配,由于“*”等價于“{0,}”,所以在忽略優先的情況下,可以不匹配任何內容。從位置1處嘗試忽略匹配,也就是不匹配任何內容,將控制權交給正則表達式最后的“””。

“"”取得控制權后,從位置1處嘗試匹配,由“"”匹配位置1處的“R”,匹配失敗,向前查找可供回溯的狀態,控制權交給“.*?”,由“.*?”吃進一個字符,匹配位置1處的“R”,再把控制權交給正則表達式最后的“"”。

“"”取得控制權后,從位置2處嘗試匹配,由“"”匹配位置1處的“e”,匹配失敗,向前查找可供回溯的狀態,重復以上過程,直到由“.*?”匹配到“x”為止,再把控制權交給正則表達式最后的“"”。

“"”取得控制權后,從位置6處嘗試匹配,由“"”匹配字符串最后的“"”,匹配成功。

此時整個正則表達式匹配成功,其中“.*?”匹配的內容為“Regex”,匹配過程中進行了五次回溯。

2.2.2 貪婪還是非貪婪——匹配效率的抉擇
通過匹配原理的分析,可以看到,在匹配成功的情況下,貪婪模式進行了更少的回溯,而回溯的過程,需要進行控制權的交接,讓出已匹配內容或匹配未匹配內容,并重新嘗試匹配,在很大程度上降低匹配效率,所以貪婪模式與非貪婪模式相比,存在匹配效率上的優勢。

但2.2.1中的例子,僅僅是一個簡單的應用,讀者看到這里時,是否會存在這樣的疑問,貪婪模式就一定比非貪婪模式匹配效率高嗎?答案是否定的。

舉例:

需求:取得兩個“"”中的子串,其中不能再包含“"”。

正則表達式一:".*"

正則表達式二:".*?"

情況一:當貪婪模式匹配到更多不需要的內容時,可能存在比非貪婪模式更多的回溯。比如源字符串為“The word "Regex" means regular expression.”。

情況二:貪婪模式無法滿足需求。比如源字符串為“The phrase "regular expression" is called "Regex" for short.”。

對于情況一,正則表達式一采用的貪婪模式,“.*”會一直匹配到字符串結束位置,控制權交給最后的“””,匹配不成功后,再進行回溯,由于多匹配的內容“means regular expression.”遠遠超過需匹配內容本身,所以采用正則表達式一時,匹配效率會比使用正則表達式二的非貪婪模式低。

對于情況二,正則表達式一匹配到的是“"regular expression" is called "Regex"”,連需求都不滿足,自然也談不上什么匹配效率的高低了。

以上兩種情況是普遍存在的,那么是不是為了滿足需求,又兼顧效率,就只能使用非貪婪模式了呢?當然不是,根據實際情況,變更匹配優先量詞修飾的子表達式,不但可以滿足需求,還可以提高匹配效率。

源字符串:"Regex"

給出正則表達式三:"[^"]*"

看一下正則表達式三的匹配過程。


圖2-3

首先由第一個“"”取得控制權,匹配位置0位的“"”,匹配成功,控制權交給“[^"]*”。

“[^"]*”取得控制權后,由于“*”是匹配優先量詞,在可匹配可不匹配的情況下,優先嘗試匹配。從位置1處的“R”開始嘗試匹配,匹配成功,繼續向右匹配,匹配位置2處的“e”,匹配成功,繼續向右匹配,直到匹配到“x”,匹配成功,再匹配結尾的“””時,匹配失敗,將控制權交給正則表達式最后的“"”。

“””取得控制權后,匹配字符串結尾處的“””,匹配成功。

此時整個正則表達式匹配成功,其中“[^"]*”匹配的內容為“Regex”,匹配過程中沒有進行回溯。

將量詞修飾的子表達式由范圍較大的“.”,換成了排除型字符組“[^"]”,使用的仍是貪婪模式,很完美的解決了需求和效率問題。當然,由于這一匹配過程沒有進行回溯,所以也不需要記錄回溯狀態,這樣就可以使用固化分組,對正則做進一步的優化。

給出正則表達式四:"(?>[^"]*)"

固化分組并不是所有語言都支持的,如.NET支持,而Java就不支持,但是在Java中卻可以使用更簡單的占有優先量詞來代替:"[^"]*+"。

3 貪婪還是非貪婪模式——再談匹配效率
一般來說,貪婪與非貪婪模式,如果量詞修飾的子表達式相同,比如“.*”和“.*?”,它們的應用場景通常是不同的,所以效率上一般不具有可比性。

而對于改變量詞修飾的子表達式,以滿足需求時,比如把“.*”改為“[^"]*”,由于修飾的子表達式已不同,也不具有直接的可對比性。但是在相同的子表達式,又都可以滿足需求的情況下,比如“[^"]*”和“[^"]*?”,貪婪模式的匹配效率通常要高些。

同時還有一個事實就是,非貪婪模式可以實現的,通過優化量詞修飾的子表達式的貪婪模式都可以實現,而貪婪模式可以實現的一些優化效果,卻未必是非貪婪模式可以實現的。

貪婪模式還有一點優勢,就是在匹配失敗時,貪婪模式可以更快速的報告失敗,從而提升匹配效率。下面將全面考察貪婪與非貪婪模式的匹配效率。

3.1 效率提升——演進過程
在了解了貪婪與非貪婪模式的匹配基本原理之后,我們再來重新看一下正則效率提升的演進過程。

需求:取得兩個“"”中的子串,其中不能再包含“"”。

源字符串:The phrase "regular expression" is called "Regex" for short.

正則表達式一:".*"

正則表達式一匹配的內容為“"regular expression" is called "Regex"”,不符合要求。

提出正則表達式二:".*?"

首先“"”取得控制權,由位置0位開始嘗試匹配,直到位置11處匹配成功,控制權交給“.*?”,匹配過程同2.2.1中非貪婪模式的匹配過程。“.*?”匹配的內容為“Regex”,匹配過程中進行了四次回溯。

如何消除回溯帶來的匹配效率的損失,就是使用更小范圍的子表達式,采用貪婪模式,提出正則表達式三:"[^"]*"

首先“"”取得控制權,由位置0位開始嘗試匹配,直到位置11處匹配成功,控制權交給“[^"]*”,匹配過程同2.2.2節中非貪婪模式的匹配過程。“[^"]*”匹配的內容為“Regex”,匹配過程中沒有進行回溯。

3.2 效率提升——更快的報告失敗
以上討論的是匹配成功的演進過程,而對于一個正則表達式,在匹配失敗的情況下,如果能夠以最快的速度報告匹配失敗,也會提升匹配效率,這或許是我們設計正則過程中最容易忽略的。而在源字符串數據量非常大,或正則表達式比較復雜的情況下,是否能夠快速報告匹配失敗,將對匹配效率產生直接的影響。

下面將構建匹配失敗的正則表達式,對匹配過程進行分析。

以下匹配過程分析中,源字符串統一為:The phrase "regular expression" is called "Regex" for short.

3.2.1 非貪婪模式匹配失敗過程分析

圖3-1

構建匹配失敗的非貪婪模式的正則表達式:".*?"@

由于最后的“@”的存在,這個正則表達式最后一定是匹配失敗的,那么看一下匹配過程。

首先由“"”取得控制權,由位置0處開始嘗試匹配,匹配失敗,直到圖中標示的A處匹配成功,控制權交給“.*?”。

“.*?”取得控制權后,由A后面的位置開始嘗試匹配,由于是非貪婪模式,首先忽略匹配,將控制權交給“"”,同時記錄一下回溯狀態。“"”取得控制權后,由A后面的位置開始嘗試匹配,匹配字符“r”失敗,查找可供回溯的狀態,將控制權交給“.*?”,由“.*?”匹配字符“r”。重復以上過程,直到“.*?”匹配了B處前面的字符“n”,“"”匹配了B處的字符“””,將控制權交給“@”。由“@”匹配接下來的空格“ ”,匹配失敗,查找可供回溯的狀態,控制權交給“.*?”,由“.*?”匹配空格。繼續重復以上匹配過程,直到由“.*?”匹配到字符串結束位置,將控制權交給“"”。由于已經是字符串結束位置,匹配失敗,報告整個表達式在位置11處匹配失敗,一輪匹配嘗試結束。

正則引擎傳動裝置使正則向前傳動,進入下一輪嘗試。后續匹配過程與第一輪嘗試匹配過程基本類似,可以參考圖3-1。

從匹配過程中可以看到,非貪婪模式的匹配失敗過程,幾乎每一步都伴隨著回溯過程,對匹配效率的影響是很大的。

3.2.2 貪婪模式匹配失敗過程分析——大范圍子表達式


圖3-2

PS:以上分析過程圖示參考了《精通正則表達式》一書相關章節圖示。

構建匹配失敗的貪婪模式的正則表達式:".*"@

其中量詞修飾的子表達式為匹配范圍較大的“.”,由于最后的“@”的存在,這個正則表達式最后也是一定匹配失敗的,看一下匹配過程。

首先由“"”取得控制權,由位置0處開始嘗試匹配,匹配失敗,直到圖中標示的A處匹配成功,控制權交給“.*”。

“.*”取得控制權后,由A后面的位置開始嘗試匹配,由于是貪婪模式,優化嘗試匹配,一直匹配到字符串的結束位置,將控制權交給“"”。“"”取得控制權后,由于已經是字符串的結束位置,匹配失敗,查找可供回溯的狀態,將控制權交給“.*”,由“.*”讓出已匹配字符“.”。重復以上過程,直到后面“"”匹配了C處后面的字符“””,將控制權交給“@”。由“@”匹配接下來D處的空格“ ”,匹配失敗,查找可供回溯的狀態,控制權交給“.*”,由“.*”讓出已匹配文本。繼續重復以上匹配過程,直到由“.*”讓出所有已匹配的文本到I處,將控制權交給“"”。“"”匹配失敗,由于已經沒有可供回溯的狀態,報告整個表達式在位置11處匹配失敗,一輪匹配嘗試結束。

正則引擎傳動裝置使正則向前傳動,進入下一輪嘗試。后續匹配過程與第一輪嘗試匹配過程基本類似,可以參考圖3-2。

從匹配過程中可以看到,大范圍子表達式貪婪模式的匹配失敗過程,從總體上看,與非貪婪模式沒有什么區別,最終進行的回溯次數與非貪婪模式基本一致,對匹配效率的影響仍然很大。

3.2.3 貪婪模式匹配失敗過程分析——改進的子表達式

圖3-3

構建匹配失敗的貪婪模式的正則表達式:"[^"]*"@

其中量詞修飾的子表達式,改為匹配范圍較小的排除型字符組“[^"]”,由于最后的“@”的存在,這個正則表達式最后也是一定匹配失敗的,看一下匹配過程。

首先由“"”取得控制權,由位置0處開始嘗試匹配,匹配失敗,直到圖中標示的A處匹配成功,控制權交給“[^"]*”。

“[^"]*”取得控制權后,由A后面的位置開始嘗試匹配,由于是貪婪模式,優先嘗試匹配,一直匹配到B處,將控制權交給“"”。“"”匹配接下來的的字符“"”,匹配成功,將控制權交給“@”。由“@”匹配接下來的空格“ ”,匹配失敗,查找可供回溯的狀態,控制權交給“[^"]*”,由“[^"]*”讓出已匹配文本。繼續重復以上匹配過程,直到由“[^"]*”讓出所有已匹配的文本到C處,將控制權交給“"”。“"”匹配失敗,由于已經沒有可供回溯的狀態,報告整個表達式在位置11處匹配失敗,一輪匹配嘗試結束。

正則引擎傳動裝置使正則向前傳動,進入下一輪嘗試。后續匹配過程與第一輪嘗試匹配過程基本類似,可以參考圖3-3。

從匹配過程中可以看到,使用了排除型字符組的貪婪模式的匹配失敗過程,從總體上看,大量減少了每輪回溯的次數,可以有效的提升匹配效率。

3.2.4 貪婪模式匹配失敗過程分析——固化分組
通過3.2.3節的分析可以知道,由于“[^"]*”使用了排除型字符組,那么圖3-3中,在A和B之間被匹配到的字符,就一定不會是字符“"”,所以B到C之間回溯過程就是多余的,也就是說在這之間的可供回溯的狀態完全可以不記錄。.NET中可以使用固化分組,Java中可以使用占有優先量詞來實現這一效果。


圖3-4

首先由“"”取得控制權,由位置0處開始嘗試匹配,匹配失敗,直到圖中標示的A處匹配成功,控制權交給“(?>[^"]*)”。

“(?>[^"]*)”取得控制權后,由A后面的位置開始嘗試匹配,由于是貪婪模式,優先嘗試匹配,一直匹配到B處,將控制權交給“"”,在這一匹配過程中,不記錄任何可供回溯的狀態。“"”匹配接下來的字符“””,匹配成功,將控制權交給“@”。由“@”匹配接下來的空格“ ”,匹配失敗,查找可供回溯的狀態,由于已經沒有可供回溯的狀態,報告整個表達式在位置11處匹配失敗,一輪匹配嘗試結束。

正則引擎傳動裝置使正則向前傳動,進入下一輪嘗試。后續匹配過程與第一輪嘗試匹配過程基本類似,可以參考圖3-4。

從匹配過程中可以看到,使用了固化分組的貪婪模式的匹配失敗過程,沒有涉及到回溯,可以最大限度的提升匹配效率。

3.3 非貪婪模式向貪婪模式的轉換
使用匹配范圍較大的子表達式時,貪婪模式與非貪婪模式匹配到的內容會有所不同,但是通過優化子表達式,非貪婪模式可以實現的匹配,貪婪模式都可以實現。

比如在實際應用中,匹配img標簽的內容。

舉例:

需求:取得img標簽中的圖片地址,src=后固定為“””

源字符串:img class="test" src="/img/logo.gif" title="測試" />

正則表達式一:img\b.*?src="(.*?)".*?>

匹配結果中,捕獲組1的內容即為圖片地址。可以看到,這個例子中使用的都是非貪婪模式,而根據上面章節的分析,后面兩個非貪婪模式都可以使用排除型字符組,將非貪婪模式轉換為貪婪模式。

正則表達式二:img\b.*?src="([^"]*)"[^>]*>

注:“src="…"”和標簽結束標記符“>”之間的屬性中,也可能出現字符“>”,但那是極端情況,這里不予討論。

后兩處非貪婪模式,可以通過排除型字符組轉換為貪婪模式,提高匹配效率,而“src=”前的非貪婪模式,由于要排除的是一個字符序列“src=”,而不是單獨的某一個或幾個字符,所以不能使用排除型字符組。當然也不是沒有辦法,可以使用順序環視來達到這一效果。

正則表達式三:img\b(?:(?!src=).)*src="([^"]*)"[^>]*>

“(?!src=).”表示這樣一個字符,從它開始,右側不能是字符序列“src=”,而“(?:(?!src=).)*”就表示符合上面規則的字符,有0個或無限多個。這樣就達到排除字符序列的目的,實現的效果同排除型字符組一樣,只不過排除型字符組排除的是一個或多個字符,而這種環視結構排除的是一個或多個有序的字符序列。

但是以順序環視的方式排除字符序列,由于在匹配每一個字符時,都要進行較多的判斷,所以相對于非貪婪模式,是提升效率還是降低效率,要根據實際情況進行分析。對于簡單的正則表達式,或是簡單的源字符串,一般來說是非貪婪模式效率高些,而對于數量較大源字符串,或是復雜的正則表達式,一般來說是貪婪模式效率高些。

比如上面取得img標簽中的圖片地址需求,基本上用正則表達二就可以了;對于復雜的應用,如平衡組中,就需要使用結合環視的貪婪模式了。

以匹配嵌套div標簽的平衡組為例:

Regex reg = new Regex(@"(?isx) #匹配模式,忽略大小寫,“.”匹配任意字符

div[^>]*> #開始標記“div...>”

(?> #分組構造,用來限定量詞“*”修飾范圍

div[^>]*> (?Open>) #命名捕獲組,遇到開始標記,入棧,Open計數加1

| #分支結構

/div> (?-Open>) #狹義平衡組,遇到結束標記,出棧,Open計數減1

| #分支結構

(?:(?!/?div\b).)* #右側不為開始或結束標記的任意字符

)* #以上子串出現0次或任意多次

(?(Open)(?!)) #判斷是否還有'OPEN',有則說明不配對,什么都不匹配

/div> #結束標記“/div>”

");

“(?:(?!/?div\b).)*”這里使用的就是結合環視的貪婪模式,雖然每匹一個字符都要做很多判斷,但這種判斷是基于字符的,速度很快,而如果這里使用非貪婪模式,那么每次要做的就是分支結構“|”的判斷了,而分支結構是非常影響匹配效率的,其代價遠遠高于對確定字符的判斷。而另外一個原因,就是貪婪模式可以結合固化分組來提升效率,而對非貪婪模式使用固化分組卻是沒有意義的。

4 貪婪與非貪婪——最后的回顧
4.1 一個例子的匹配原理回顧
再回過頭來看一下2.1.1節例子中正則,前面從應用角度進行了分析,但討論過匹配原理后會發現,匹配過程并不是那么簡單的,下面從匹配原理角度分析的匹配過程。


圖4-1

首先由“”取得控制權,由位置0位開始嘗試匹配,匹配字符“a”,匹配失敗,第一輪匹配結束。第二輪匹配從位置1開始嘗試匹配,同樣匹配失敗。第三輪從位置3開始嘗試匹配,匹配字符“”,匹配成功,控制權交給“d”。

“d”嘗試匹配字符“d”,匹配成功,控制權交給“i”。重復以上過程,直到由“>”匹配到字符“>”,控制權交給“.*”。

“.*”屬于貪婪模式,將從B處后的字符“t”開始,一直匹配到E處,也就是字符串結束位置,將控制權交給“”。

“”從字符串結束位置嘗試匹配,匹配失敗,向前查找可供回溯的狀態,把控制權交給“.*”,由“.*”讓出一個字符“c”,把控制權再交給“”,嘗試匹配,匹配失敗,向前查找可供回溯的狀態。一直重復以上過程,直到“.*”讓出已匹配的字符“”,實際上也就是讓出了已匹配的子串“/div>cc”為止,“”才匹配字符“”成功,控制權交給“/”。

接下來由“/”、“d”、“i”、“v”分別匹配對應的字符成功,此時整個正則表達式匹配完畢。

4.2 貪婪與非貪婪——量詞的細節
4.2.1 區間量詞的非貪婪模式
前面提到的非貪婪模式,一直都是使用的“*?”,而沒有涉及到其它的區間量詞,對于“*?”和“+?”這樣的非貪婪模式,大多數接觸過正則表達式的人都可以理解,但是對于區間量詞的非貪婪模式,比如“{m,n}?”,要么是沒見過,要么是不理解,主要是這種應用場景非常少,所以被忽略了。

首先需要明確的一點,就是量詞“{m,n}”是匹配優先量詞,雖然它有了上限,但是在達到上限之前,能夠匹配,還是要盡可能多的匹配的。而“{m,n}?”就是對應的忽略優先量詞了,在可匹配可不匹配的情況下,盡可能少的匹配。

接下來舉一個例子說明這種非貪婪模式的應用。

舉例(參考 限制字符長度與最小匹配):

需求:如何限制在長度為100的字符串中,從頭匹配到最先出現的abc

csdn.{1,100}abc 這樣寫是最大匹配(1-100個字符串中,我需要最小的)

比如csdnfddabckjdsfjabc,匹配結果應為:csdnfddabc

正則表達式:csdn.{1,100}?abc

或許對這個例子還有人不是很理解,但是想想,其實“*”就等價于“{0,}”,“+”就等價于“{1,}”,“*?”也就是“{0,}?”,抽象出來也就是“{m,}?”,即上限為無窮大。如果上限為一個固定值,那就是“{m,n}?”,這樣應該也就可以理解了。

“{m}”沒有放在匹配優先量詞中,同樣的,“{m}?”雖然被部分語言所支持,但是也沒有放在忽略優先量詞中,主要是因為這兩種量詞,實現的效果是一樣的,只有被修飾的子表達式匹配m次才能匹配成功,且沒有可供回溯的狀態,所以也不存在是匹配優先還是忽略優先的問題,也就不在本文的討論范圍內。事實上即使討論也沒有意義的,只要知道它們的匹配行為也就是了。

4.2.2 忽略優先量詞的匹配下限
對于匹配優先量詞的匹配下限很好理解,“?”等價于“{0,1}”,它修飾的子表達式,最少匹配0次,最多匹配1次;“*”等價于“{0,}”,它修飾的子表達式,最少匹配0次,最多匹配無窮多次;“+”等價于“{1,}”,它修飾的子表達式,最少匹配1次,最多匹配無窮多次。

對于忽略優先量詞的下限,也是容易忽略的。

“??”也是忽略優先量詞,被修飾的子表達式使用的也是非貪婪模式,“??”修飾的子表達式,最少匹配0次,最多匹配1次。在匹配過程中,遵循非貪婪模式匹配原則,先不匹配,即匹配0次,記錄回溯狀態,只有不得不匹配時,才去嘗試匹配。

“*?”修飾的子表達式,最少匹配0次,最多匹配無窮多次;“+?”修飾的子表達式,最少匹配1次,最多匹配無窮多次,“+?”雖然使用的是非貪婪模式,在匹配過程中,首先要匹配一個字符,之后才是忽略匹配的,這一點也需要注意。

4.3 貪婪與非貪婪模式小結
Ø 從語法角度看貪婪與非貪婪

被匹配優先量詞修飾的子表達式,使用的是貪婪模式;被忽略優先量詞修飾的子表達式,使用的是非貪婪模式。

匹配優先量詞包括:“{m,n}”、“{m,}”、“?”、“*”和“+”。

忽略優先量詞包括:“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。

Ø 從應用角度看貪婪與非貪婪

貪婪與非貪婪模式影響的是被量詞修飾的子表達式的匹配行為,貪婪模式在整個表達式匹配成功的前提下,盡可能多的匹配;而非貪婪模式在整個表達式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分NFA引擎所支持。

Ø 從匹配原理角度看貪婪與非貪婪

能達到同樣匹配結果的貪婪與非貪婪模式,通常是貪婪模式的匹配效率較高。

所有的非貪婪模式,都可以通過修改量詞修飾的子表達式,轉換為貪婪模式。

貪婪模式可以與固化分組結合,提升匹配效率,而非貪婪模式卻不可以。
您可能感興趣的文章:
  • 正則表達式(regex) 貪婪模式、懶惰模式使用方法
  • 小議正則表達式效率 貪婪、非貪婪與回溯
  • 淺談php正則表達式中的非貪婪模式匹配的使用
  • [正則表達式]貪婪模式與非貪婪模式
  • 正則表達式量詞與貪婪的使用詳解

標簽:長沙 銅川 西安 宣城 重慶 泰州 綿陽 無錫

巨人網絡通訊聲明:本文標題《正則表達式之 貪婪與非貪婪模式詳解(概述)》,本文關鍵詞  正則,表達式,之,貪婪,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式之 貪婪與非貪婪模式詳解(概述)》相關的同類信息!
  • 本頁收集關于正則表達式之 貪婪與非貪婪模式詳解(概述)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 上海雄风起重设备厂有限公司 | 广东仕诚塑料机械有限公司 | 广州新浪爱拓化工机械有限公司 | 东莞市鼎祥通用机械设备有限公司 | 上海 精密机械有限公司| 新乡市海纳筛分机械制造有限公司 | 常州都可机械有限公司| 旭众食品机械有限公司| 东莞机械设备制造有限公司| 常州汤姆包装机械有限公司| 大连龙尧塑料机械有限公司 | 广州闽欣机械设备有限公司 | 江苏汤姆包装机械有限公司| 山东章晃机械工业有限公司| 温州市鹿城江心服装机械有限公司| 上海展仕机械设备有限公司| 河北神耕机械有限公司| 诺威起重设备苏州有限公司| 佛山包装机械有限公司| 青岛岛宇机械有限公司| 鲁山万通通机械制造有限公司 | 大连军峰机械有限公司| 昆山 机械设备有限公司| 广州市德晟机械有限公司| 金坛包装机械有限公司| 江苏银河机械有限公司| 武义海拓机械有限公司| 杭州汽轮机械设备有限公司| 温州包装机械有限公司| 安特苏州精密机械有限公司| 成都兴业邦达重工机械有限公司| 浙江晨雕机械有限公司| 佛山市创利宝包装机械有限公司 | 长沙宏银机械有限公司| 徐州福曼随车起重机有限公司 | 临沂三友重工有限公司| 佛山市顺德区金工铝门窗机械实业有限公司 | 湖南卓迪机械有限公司| 德清恒丰机械有限公司| 远大机械制造有限公司| 上海凌鹰机械有限公司| 宁波钢铁有限公司地址| 河北强华水利机械有限公司| 青州矿砂机械有限公司| 建筑机械租赁有限公司| 天津市精密机械有限公司| 广州广重分离机械有限公司| 合肥食品机械有限公司| 艾莎钢铁天津有限公司| 苏州久富农业机械有限公司| 昆山拓可机械有限公司| 陕西机械设备有限公司| 南通中船机械制造有限公司| 纸箱机械制造有限公司| 山东冠成机械有限公司| 上海取祥机械有限公司| 宁波海江机械制造有限公司 | 江苏中热机械设备有限公司| 新华起重工具有限公司| 宁波久力数控机械有限公司 | 郑州市恒昌机械制造有限公司 | 东莞启益电器机械有限公司 | 山东恒基钢铁有限公司| 东莞市佐臣自动化机械有限公司| 江苏金荣机械有限公司| 常州小松工程机械有限公司招聘| 佛山市宝捷精密机械有限公司| 杭州川禾机械有限公司| 深圳市兴合发齿轮机械有限公司| 浙江小伦制药机械有限公司 | 上海山美重型矿山机械有限公司| 天津 津工机械有限公司| 河南龙工机械制造有限公司| 上海恒麦食品机械有限公司| 无锡双益精密机械有限公司| 大连 重工有限公司| 三菱重工上海有限公司| 唐山众达机械轧辊有限公司| 上海定盛机械有限公司| 陕西锦泰机械有限公司| 佛山市明宏机械设备有限公司| 山东中悦钢铁有限公司| 绍兴 机械 有限公司| 上海江埔印刷机械有限公司 | 协展机械工业有限公司| 台州华达机械有限公司| 苏州工业园区机械有限公司| 上海行雄机械有限公司| 飞扬机械制造有限公司| 昆山台一精密机械有限公司| 设备机械制造有限公司| 普瑞特机械有限公司| 无锡双益精密机械有限公司| 无锡市阳通机械设备有限公司| 随州市恒大机械铸造有限公司| 江苏冠宇机械设备制造有限公司| 浙江机械制造有限公司| 扬州鼎隆机械有限公司| 机械设备有限公司经营范围| 友池精密机械有限公司| 抚顺中兴重工有限公司| 营口隆仁重工有限公司| 财益机械工业有限公司| 芜湖电工机械有限公司| 东莞大同机械有限公司| 华威机械制造有限公司| 百斯特机械有限公司| 东莞市瑞辉机械制造有限公司| 苏州荣业机械有限公司| 德莱赛机械苏州有限公司| 淄博捷达机械有限公司| 杭州速能机械有限公司| 上海江浪流体机械制造有限公司| 湖州三一重工有限公司| 山东起重机有限公司| 上海起华机械有限公司| 青岛海诺机械制造有限公司| 浙江省机械有限公司| 重庆华世丹机械制造有限公司| 志成机械制造有限公司| 上海巨远塑料机械有限公司| 河北中浩机械制造有限公司 | 扬州 机械设备 有限公司| 浙江正信机械有限公司| 上海嘉峥机械有限公司| 德瑞机械设备有限公司| 徐州利国钢铁有限公司| 广东省重工建筑设计院有限公司| 温州市润新机械制造有限公司| 河南人从众机械制造有限公司 | 沧州科信环保机械有限公司| 华力重工机械有限公司| 威海威力起重有限公司| 南京远景机械有限公司| 杭州德智机械有限公司| 东莞数控机械有限公司| 青岛南牧机械设备有限公司| 浙江双子机械制造有限公司| 广州市德晟机械有限公司| 浙江赛力机械有限公司| 天津的机械设备有限公司| 挤出机械 有限公司| 齐鲁石化机械制造有限公司招聘| 八达重工机械有限公司| 扬州冶金机械有限公司| 新乡市佳盛振动机械有限公司| 天津伟业钢铁贸易有限公司| 中交西安筑路机械有限公司| 重庆市机械有限公司| 随州市恒大机械铸造有限公司 | 上海欧特莱阀门机械有限公司 | 深圳步先包装机械有限公司| 佛山市恒奥佳化工机械有限公司| 杭州高福机械制造有限公司| 郑州沃尔德机械制造有限公司| 东莞市得士威机械工业有限公司| 上海宁金钢铁有限公司| 贝奇尔机械有限公司| 苏州荣业机械有限公司| 新乡市先锋振动机械有限公司| 山东天瑞重工有限公司| 英侨机械制造有限公司| 北京 机械有限公司| 青岛鲁耕农业机械有限公司| 徐工基础工程机械有限公司| 溧阳科华机械制造有限公司| 临沂盖氏机械有限公司| 邯郸海拓机械有限公司| 上海涟恒精密机械有限公司| 柳州欧维姆机械有限公司| 广州博创机械有限公司| 济宁立派工程机械有限公司 | 华群数控机械有限公司| 菲美得机械有限公司| 杭州 机械设备有限公司| 烟台飞达机械有限公司| 温州韦盛机械有限公司| 上海亚遥工程机械有限公司| 廊坊中建机械有限公司| 南通赛孚机械设备有限公司| 金丰机械工业有限公司| 安来动力机械有限公司| 江阴市化工机械有限公司| 唐山鑫达钢铁有限公司| 天津市华天世纪机械有限公司| 东营程祥机械有限公司| 南通中远重工有限公司| 苏州洁宝机械有限公司| 济宁福康机械加工有限公司| 梁发记机械有限公司| 服装有限公司起名大全| 上海川口机械有限公司| 泉州市恒兴工业机械有限公司| 常州 机械 有限公司| 广州广田包装机械有限公司| 泰州机械设备有限公司| 上海岭申机械有限公司| 土平机械江苏有限公司| 山东山鼎工程机械有限公司| 鑫科木工机械有限公司| 东莞胜通机械有限公司| 射阳 机械有限公司| 潍坊市通用机械有限公司| 烟台美丰机械有限公司| 山东领品机械有限公司| 浙江超伟机械有限公司| 苏州起重机械有限公司| 成都康博机械有限公司| 山东川大机械设备有限公司| 万通机械制造有限公司| 天津聚鑫贵泽钢铁贸易有限公司| 东莞市乔锋机械有限公司| 江苏电能机械有限公司| 山东鲁机械有限公司| 英隆机械昆山有限公司| 江苏联顺机械有限公司| 龙文机械设备有限公司| 昆山贝奇精密机械有限公司| 上海展焱包装机械有限公司| 长沙远洋机械制造有限公司| 上海永策机械设备有限公司| 桂林科丰机械有限公司| 上海树新机械有限公司| 杭州德工机械有限公司| 温州市顺达服装机械有限公司| 广东粤韶钢铁有限公司| 顺昌机械制造有限公司| 常州耐强传动机械有限公司| 南通友德机械有限公司| 宁波塑料机械有限公司| 聊城 机械 有限公司| 上海橡塑机械有限公司| 戴氏印刷机械有限公司| 东莞志成机械有限公司| 安徽机械制造有限公司| 山东泰瑞汽车机械电器有限公司| 徐州天地重型机械制造有限公司| 青岛塑料机械有限公司| 成都 机械 有限公司| 广东金兴机械有限公司| 山东大丰机械有限公司| 科华机械制造有限公司| 常州精密机械有限公司| 大方起重机器有限公司| 吉林鑫达钢铁有限公司| 三门峡宏基机械有限公司| 昆山机械制造有限公司| 温州佳诚机械有限公司| 赛柏精密机械有限公司| 佛山市机械制造有限公司| 广东机械制造有限公司| 浙江金马逊机械有限公司| 山东兴田机械有限公司| 美心翼申机械有限公司| 南京久庆机械有限公司| 江阴 起重机械有限公司| 青岛华雷重工设备有限公司| 四川诚德机械有限公司| 重工机械制造有限公司| 东风悦达起亚汽车有限公司| 荏原机械淄博有限公司| 佛山市永盛达机械有限公司| 东阳机械设备制造有限公司| 张家港重工有限公司| 江阴市液压机械有限公司| 江阴铸造机械有限公司| 无锡建筑机械有限公司| 上海板换机械设备有限公司| 山东岳工机械有限公司| 深圳市宏机械设备有限公司| 新疆机械设备有限公司| 邹平宏鑫机械有限公司| 中安重工自动化装备有限公司| 上海重型机械有限公司| 亨内基机械上海有限公司| 研精舍上海精密机械加工有限公司| 郑州鑫宇机械制造有限公司| 上海曼中机械有限公司| 烟台拓伟机械有限公司| 青岛天乐机械有限公司| 上海乾承机械设备有限公司| 新乡市新久振动机械有限公司| 矿山机械设备有限公司| 蓬莱禄昊化工机械有限公司| 浙江嘉益机械有限公司| 上海唐迪机械制造有限公司| 福建巨邦机械有限公司| 东莞沃德精密机械有限公司| 山西中升钢铁有限公司| 昆山富邦机械有限公司| 合肥康恒机械有限公司| 惟其信石油机械(天津)有限公司| 翼虎动力机械有限公司| 咸阳联合机械有限公司| 北海船舶重工有限公司| 上海川源机械工程有限公司| 新乡黄氏食品机械有限公司| 江阴市新友机械制造有限公司| 浙江西子重工机械有限公司| 北海船舶重工有限公司| 淄博晟峰机械有限公司| 济南岳峰机械有限公司| 常州博成机械有限公司| 无锡市康晖机械制造有限公司 | 山东领品机械有限公司| 上海 机械有限公司| 青岛岛宇机械有限公司| 广东粤凯机械有限公司| 广州市 工程机械有限公司| 陕西机械设备有限公司| 广东力特工程机械有限公司 | 东莞市千岛机械制造有限公司| 重庆蓝黛动力传动机械有限公司| 洛阳翼明机械有限公司| 济宁市福瑞得机械有限公司 | 广州晶冠机械有限公司| 济南建筑机械有限公司| 徐州起重机械有限公司| 上海金纬挤出机械制造有限公司 | 上海帆铭机械有限公司| 上海科纳机械有限公司| 宁波东力机械制造有限公司| 江西神起信息技术有限公司| 金坛市 机械有限公司| 常州都可机械有限公司| 佛山市科鹰机械有限公司 | 东莞麒麟机械有限公司| 浙江联科机械有限公司| 宁波双马机械工业有限公司| 东莞英豪机械有限公司| 浙江合诺机械有限公司| 威海化工机械有限公司招聘| 安徽远鸿机械自动化有限公司 | 沂水巨龙机械有限公司| 东莞市茂丰机械有限公司| 山东港中钢铁有限公司| 盐城液压机械有限公司| 长沙益广制药机械有限公司| 昆山市烽禾升精密机械有限公司 | 湖南省湘粮机械制造有限公司 | 大连机械设备有限公司| 福州机械制造有限公司| 中山冠力机械有限公司| 株洲机械制造有限公司| 蓬莱万寿机械有限公司| 广东富华机械装备制造有限公司| 常州杰和机械有限公司| 昆山硕杰机械有限公司| 上海舒平精工机械有限公司| 山东西王钢铁有限公司| 上海博储机械工业有限公司| 扬州沃尔特机械有限公司| 上海信机械有限公司| 沁阳宏达钢铁有限公司| 河南信联重工机械有限公司| 青岛洪珠农业机械有限公司| 常州 机械有限公司| 新昌县机械有限公司| 潍坊元鸣机械有限公司| 济南四通机械有限公司| 潍坊华星机械有限公司| 泊头市环保机械有限公司| 天津机械设备有限公司| 南京明瑞机械设备有限公司 | 东莞市固达机械制造有限公司 | 上海尼尔机械制造有限公司| 徐州华东机械有限公司| 广东富华机械装备制造有限公司| 群鑫机械有限公司电话| 郑州重工机械有限公司| 绿友园林机械有限公司| 河南工程机械有限公司| 上海杰姆博机械设备有限公司| 南通盛仕达精密机械有限公司| 元机械制造有限公司| 葛洲坝机械船舶有限公司| 上海海邦机械设备制造有限公司 | 朗维纺织机械有限公司| 江苏船谷重工有限公司| 杭州中亚机械有限公司| 东莞市旭田包装机械有限公司 | 东莞木工机械有限公司| 芜湖良仕机械有限公司| 台林机械有限公司 -| 东莞发机械有限公司| 威海华东重工有限公司| 新乡 筛分机械有限公司| 诸城隆泽机械有限公司| 苏州凯尔博精密机械有限公司 | 宏强机械设备有限公司| 无锡科创机械设计制造有限公司| 佛山建邦机械有限公司| 徐州液压机械有限公司| 贵阳长乐钢铁有限公司| 佛山精诚机械有限公司| 佛山市奥索包装机械有限公司| 泸州长江机械有限公司| 上海乔麦包装机械有限公司| 中山市信元铝门窗机械制造有限公司| 青岛木工机械有限公司| 上海欧特莱阀门机械有限公司 | 江苏百事德机械有限公司| 威海 机械有限公司| 广西南宁机械有限公司| 成都固特机械有限公司| 山东德丰重工有限公司| 江西江锻重工有限公司| 徐州徐工基础工程机械有限公司| 青岛鲁耕农业机械有限公司 | 挤出机械 有限公司| 宁波东力机械制造有限公司 | 合肥永升机械有限公司| 白鸽食品机械有限公司| 东莞瑞辉机械有限公司| 大连华锐重工有限公司| 山东重型机械有限公司| 太原通泽重工有限公司| 绍兴三纺机械有限公司| 杭州一鼎传动机械有限公司 | 工程机械制造有限公司| 郑州升升机械有限公司| 旭英机械有限公司招聘| 合肥春华起重机械有限公司| 青岛博朗特机械设备有限公司| 飞扬机械制造有限公司| 上海机械工程有限公司| 枣庄誉源挂车机械有限公司| 安徽金庆龙机械制造有限公司 | 湖南天拓重工机械有限公司| 连云港 机械有限公司| 杭州传动机械有限公司| 郑州祥龙建筑机械租赁有限公司 | 工程机械配件有限公司| 江门 机械 有限公司| 创世纪机械有限公司| 东莞市乔锋机械有限公司| 杭州海纳机械有限公司| 广州力净洗涤机械有限公司| 杭州建明机械有限公司| 舞钢中加钢铁有限公司| 卓郎智能机械有限公司| 玉环机械制造有限公司| 广东马氏机械有限公司| 高邮和益机械有限公司| 合肥亿恒机械有限公司| 山东起重设备有限公司| 河南启瀚机械设备有限公司| 郑州市鑫宇机械制造有限公司| 固精密机械有限公司| 青岛弗林斯曼机械制造有限公司 | 三明 机械有限公司| 郑州市恒昌机械制造有限公司| 上海龙应机械制造有限公司| 日照立盈机械有限公司| 宁波正凯机械有限公司| 陕西重型机械制造有限公司 | 深圳市合发齿轮机械有限公司| 燕拓航(北京)真空机械有限公司| 河北神耕机械有限公司| 山东莱工机械制造有限公司| 常州新燎原机械有限公司| 纸箱机械 有限公司| 莆田 机械有限公司| 昆成机械昆山有限公司| 新乡正兴机械有限公司| 财益机械工业有限公司| 洛阳卓格哈斯机械有限公司| 海狮洗涤机械有限公司| 青岛吉瑞特机械制造有限公司| 仕诚塑料机械有限公司| 扬州液压机械有限公司| 上海自动化机械有限公司| 上海钊凯包装机械有限公司| 安徽 机械制造有限公司| 洛阳泽华机械设备有限公司| 利德盛机械有限公司| 宁波博旺机械有限公司| 明天机械有限公司待遇| 圣博液压机械有限公司| 东莞太星机械有限公司| 亿佰通机械有限公司| 诸城科翔机械有限公司| 浙江赛力机械有限公司| 扬州 机械 有限公司| 杭州千和精密机械有限公司| 恩倍力机械有限公司| 佛山市包装机械有限公司| 宁波双马机械工业有限公司| 诸城市金祥机械有限公司| 鞍山机械制造有限公司| 郑州世纪精信机械制造有限公司| 郑州未来机械制造有限公司 | 宁波星源机械有限公司| 南昌欣向荣机械有限公司| 东莞正扬电子机械有限公司怎么样 | 杭州三普机械有限公司| 河北鑫晟机械有限公司| 浙江三永机械有限公司| 武汉纵能机械制造有限公司| 南通虹波机械有限公司| 中原圣起起重机械有限公司| 常州化工机械有限公司| 科尼乐机械设备有限公司| 重庆茂田机械有限公司| 上海奉业包装机械有限公司 | 青岛 钢铁有限公司| 杭州机械设备制造有限公司| 饶阳鸿源机械有限公司| 昆山工业机械有限公司| 精密达机械有限公司| 上海科劳机械设备有限公司| 富华重工有限公司老板| 深圳美鹏机械设备有限公司| 西安金力特机械设备有限公司| 山东通佳机械有限公司| 宁波旭升机械有限公司| 青岛 木工机械有限公司| 三菱重工上海有限公司| 创达机械制造有限公司| 唐山众达机械轧辊有限公司| 江苏长强钢铁有限公司| 潍坊钰兴机械有限公司| 快克数控机械有限公司| 汤姆包装机械有限公司| 南通新兴机械制造有限公司| 建筑工程有限公司起名| 无锡海天机械有限公司| 吉首市中诚制药机械有限公司| 三马起重机有限公司| 江西鑫通机械有限公司| 青岛特殊钢铁有限公司| 欧克机械制造有限公司| 东莞迅得机械有限公司| 淄博机械制造有限公司| 缙云县机械有限公司| 福建精密机械有限公司| 重庆文安机械有限公司| 杭州五金机械有限公司| 广州市力进食品机械有限公司| 杭州双利机械有限公司| 上海旭恒精工机械制造有限公司| 浙江宏华机械塑胶有限公司 | 苏州 工业机械有限公司| 山东济宁机械有限公司| 南平 机械 有限公司| 郑州市联华机械制造有限公司| 江苏宏威重工机床制造有限公司| 昆山裕邦机械有限公司| 宏达机械制造有限公司| 芜湖科翔动力机械有限公司| 贝纳特机械有限公司| 海宁美惠机械有限公司| 山西太行钢铁有限公司| 无锡森本精密机械有限公司| 福州六和机械有限公司| 重庆墨龙机械有限公司| 东莞市茂丰机械有限公司| 常州锐展机械有限公司| 江苏如石机械有限公司| 郑州天龙机械有限公司| 太仓倍加机械有限公司| 艾沃意特机械设备制造有限公司| 机械有限公司经营范围| 山西万泽锦达机械制造有限公司 | 烟台石油机械有限公司| 上海盟申机械设备有限公司| 东莞正扬电子机械有限公司怎么样| 南京 机械设备有限公司| 成都弘邦机械有限公司| 矿山起重机有限公司| 杭州群起建材有限公司| 河北小松工程机械贸易有限公司| 上海久协机械设备有限公司| 洛阳震动机械有限公司| 天津聚鑫贵泽钢铁贸易有限公司 | 上海轩世机械有限公司| 浙江人和机械有限公司| 天津市天机液压机械有限公司| 广州新浪爱拓化工机械有限公司| 常州市日中精密机械有限公司| 安徽佶龙机械有限公司| 诸城市恒顺机械有限公司| 标特福精密机械电子有限公司 | 江苏方邦机械有限公司| 深圳起航电商有限公司| 广东重工建设监理有限公司| 金昶泰机械设备有限公司| 成都松茂工程机械有限公司| 安徽好运机械有限公司| 泉州市闽达机械制造有限公司| 上海敏硕机械配件有限公司| 廊坊德基机械有限公司| 东莞市腾机械有限公司| 苏州开隆机械有限公司| 高义钢铁有限公司电话| 江苏科力机械有限公司| 河北安丰钢铁有限公司| 台州启运机械有限公司| 南方力劲机械有限公司| 常州市丰丰机械有限公司| 苏州海盛精密机械有限公司怎么样| 沈阳斗山工程机械有限公司| 山东正阳机械有限公司| 上海福源机械有限公司| 福建瑜鼎机械有限公司| 广州华研精密机械有限公司| 浙江歌德起重机有限公司| 孝感金达钢铁有限公司| 长沙威沃机械制造有限公司 | 烟台 机械设备有限公司| 杭州沃沃机械有限公司| 阜新恒泰机械有限公司| 苏州鸿安机械有限公司| 洛阳起重机厂有限公司| 昆成机械制造有限公司| 宁波博信机械制造有限公司| 上海戈扬包装机械有限公司| 优瑞纳斯液压机械有限公司| 东莞市东机械设备有限公司| 泊头市环保机械有限公司| 南通盛仕达精密机械有限公司 | 工程机械租赁有限公司| 洛阳路通重工机械有限公司| 广州起重机械有限公司招聘| 唐山粤丰钢铁有限公司| 廊坊畅享机械有限公司| 恒源机械制造有限公司| 尤工机械设备有限公司| 星火包装机械有限公司| 动力机械制造有限公司| 江西九江萍钢钢铁有限公司| 上海中远海运重工有限公司| 江苏宏达起重电机有限公司| 江苏中贵重工有限公司| 温岭市林大机械有限公司| 莆田 机械有限公司| 浙江自力机械有限公司| 深圳市神田机械设备有限公司| 常州斯太尔动力机械有限公司| 上海瀚艺冷冻机械有限公司 | 启东丰顺重工有限公司| 东莞麒麟机械有限公司| 布勒机械设备有限公司| 杭州旭众机械设备有限公司| 上海宇意机械有限公司| 东莞市千岛机械制造有限公司| 金华巨鑫机械有限公司| 扬州禹笑水利机械有限公司| 立信染整机械深圳有限公司| 江苏长虹涂装机械有限公司| 沈阳恒力机械有限公司| 东莞市恩必信塑胶机械有限公司| 河南省浩业矿山机械有限公司| 汕头市机械有限公司| 威海精密机械有限公司| 盛达机械设备有限公司| 深圳龙润彩印机械设备有限公司| 江阴市机械制造有限公司| 机械进出口有限公司| 嘉兴精密机械有限公司| 上海信进精密机械有限公司| 湖北鄂钢扬子重型机械制造有限公司| 宁波北仑 机械有限公司| 机械加工有限公司简介| 泉州市恒兴工业机械有限公司| 沈阳捷优机械设备有限公司| 广汉市蜀汉粮油机械有限公司| 华西钢铁有限公司电话| 上海科熙起重设备有限公司| 贵州运东机械有限公司| 常州立达纺织机械有限公司 | 上海科斯包装机械有限公司| 曲阜广鑫机械有限公司| 诸城市富瑞德机械有限公司 | 上海卓亚矿山机械有限公司| 新乡市大汉振动机械有限公司| 湖南卓迪机械有限公司| 三益精密机械有限公司| 杭州速捷机械有限公司| 临沂正大机械有限公司| 浙江邦泰机械有限公司| 无锡橡塑机械有限公司| 广州工程机械有限公司| 鞍山重工机械有限公司| 江阴市豪亚机械制造有限公司| 杭州灵达机械有限公司| 郑州市鑫宇机械制造有限公司| 重庆川凯机械有限公司| 厦门洪海机械有限公司| 新乐华宝塑料机械有限公司 | 江阴福鑫机械有限公司| 天盛机械制造有限公司| 珠海市广浩捷精密机械有限公司| 徐州徐工基础工程机械有限公司| 临沂机械制造有限公司| 沈阳恒力机械有限公司| 济南龙安机械有限公司| 陕西恒德精密机械有限公司| 江苏宏光钢铁有限公司| 涿州北方重工设备设计有限公司 | 哈尔滨机械设备有限公司| 内蒙古机械有限公司| 扬州 机械有限公司| 珠海市中鑫隆机械化建设工程有限公司| 安徽国梁机械设备有限公司| 富华重工制造有限公司| 张家港市贝尔机械有限公司| 江苏巨威机械有限公司| 瑞安市创博机械有限公司| 江阴化工机械有限公司| 苏州毕特富精密机械有限公司| 合肥福晟机械制造有限公司| 昆山胜代机械有限公司| 博阳机械制造有限公司| 泉州泉丰机械有限公司| 武汉船舶重工有限公司| 潍坊华全动力机械有限公司| 泰安古河机械有限公司| 宁波创基机械有限公司| 农业机械制造有限公司| 西安飞鸿机械有限公司| 临沂金盛机械配套有限公司| 浙江瑞大机械有限公司| 江阴市三 机械有限公司| 淄博 机械设备有限公司| 东莞市台克机械有限公司| 广州工友起重设备制造有限公司 | 徐州市机械有限公司| 苏州三维精密机械有限公司| 常林道依茨法尔机械有限公司| 上海万铂起重机械有限公司| 龙口和义机械有限公司| 瑞安市华东包装机械有限公司 | 常州小松工程机械有限公司招聘| 圣固 江苏 机械有限公司| 佛山市机械有限公司| 东莞正为机械有限公司| 江苏瀚皋机械有限公司| 大连仁海重工有限公司| 浙江远信印染机械有限公司| 上海牛力机械有限公司| 佛山市机械设备有限公司| 唐山市机械有限公司| 启益电器材机械有限公司招聘| 青岛如隆机械有限公司| 机械密封件有限公司| 无锡光良塑料机械有限公司| 德州德工机械有限公司| 江阴市液压机械有限公司| 新昌县蓝翔机械有限公司| 许昌智工机械制造有限公司| 中山市机械有限公司| 河南华北起重吊钩有限公司| 精密机械加工有限公司| 宁江精密机械有限公司| 杭州力诺机械设备有限公司| 廊坊畅享机械有限公司| 洛阳洛北重工机械有限公司| 欧力特机械有限公司| 山东六丰机械有限公司| 成都工程机械有限公司| 江苏爱斯特机械有限公司怎么样| 宁波美宁机械有限公司| 湖南机械设备有限公司| 东莞市天成机械有限公司| 广东明华机械有限公司| 柳州商泰机械有限公司| 广州包装机械有限公司| 北京明日之星玻璃机械有限公司| 浙江兴盛机械有限公司| 无锡新世杰辊压机械有限公司 | 温州朝隆纺织机械有限公司| 青岛万邦包装机械有限公司| 济宁福康机械加工有限公司| 南昌中昊机械有限公司| 蚌埠柳工机械有限公司| 苏州启点机械有限公司| 江苏隆达机械设备有限公司| 江阴市科盛机械有限公司| 咸阳恒佳机械有限公司| 鹰起重机械有限公司| 浙江勇力机械有限公司| 青岛包装机械有限公司| 爱科农业机械有限公司| 沧州科信环保机械有限公司| 东莞市旭田包装机械有限公司| 上海宏铭纺织机械有限公司| 富信成机械有限公司| 台一精工机械有限公司| 曲阜机械制造有限公司| 唐山国义钢铁有限公司| 佛山市信虹精密机械有限公司| 郑州三和水工机械有限公司| 郑州新水工机械有限公司| 深圳市包装机械有限公司| 浙江富昌机械有限公司| 阜新恒泰机械有限公司| 厦门大金机械有限公司| 苏州宏呈祥机械有限公司| 陕西 工程机械有限公司| 烟台鼎科机械有限公司| 西安金力特机械设备有限公司| 厦门华峰辊压机械有限公司| 国机重工洛阳有限公司| 汤阴升达机械有限公司| 湖北机械设备有限公司| 深圳新添润彩印机械设备有限公司 | 南通丰威机械有限公司| 潍坊 机械有限公司| 山东岳峰起重机械有限公司| 南通艾迈特机械有限公司| 上海木工机械有限公司| 洛阳福格森机械装备有限公司 | 成都的起重有限公司| 莱州行星机械有限公司| 上海松精机械制造有限公司| 天津工程机械有限公司| 广东粤韶钢铁有限公司| 潍坊圣旋机械有限公司| 唐山佳鑫机械配件有限公司| 常州铭盈包装机械有限公司| 机械设备租赁有限公司| 东莞恒力机械有限公司| 福州四兴机械有限公司| 北京晨光兴业机械有限公司| 山东兴源机械有限公司| 南京登峰起重设备制造有限公司| 鸿源机械制造有限公司| 山西太行钢铁有限公司| 成都欧曼机械有限公司| 桂林橡胶机械有限公司| 随州盛星机械有限公司| 昆成机械制造有限公司| 湖北铁正机械有限公司| 浙江流遍机械润滑有限公司| 蓬莱万寿机械有限公司| 苏州斗山工程机械有限公司| 沈阳联合利邦机械有限公司| 明天机械有限公司待遇| 中兴机械制造有限公司| 江苏华粮机械有限公司| 上海起重电机厂有限公司| 运输有限公司起名大全| 丰润区钢铁有限公司| 广州华研精密机械有限公司| 住友重机械有限公司| 山东威曼机械有限公司| 温州国伟印刷机械有限公司| 山东天力液压机械有限公司| 山东 工程机械有限公司| 宝钢湛江钢铁有限公司| 青岛雷沃工程机械有限公司| 四川诚德机械有限公司| 嘉兴市宏丰机械有限公司| 常州赛瑞克包装机械有限公司 | 河北犀牛民用机械有限公司| 康铖机械设备有限公司| 常州工程机械有限公司| 杭州液压机械有限公司| 东莞启益电器机械有限公司| 成都瑞迪机械实业有限公司| 宁波创基机械有限公司| 上海宝丰机械制造有限公司| 邢台机械制造有限公司| 广东日钢机械有限公司| 杭州建明机械有限公司| 上海震伦机械有限公司| 大连亨益机械有限公司| 益丰泰机械有限公司| 济南启正机械工业有限公司| 江苏苏东机械有限公司| 广州 机械设备有限公司| 青岛精密机械有限公司| 浙江江华机械有限公司| 成都市机械有限公司| 东方机械制造有限公司| 福建省 机械有限公司| 泉州力泉机械有限公司| 广东食品机械有限公司| 输送机械制造有限公司| 安徽精密机械有限公司| 新乡振动机械有限公司| 液压机械制造有限公司| 保定机械制造有限公司| 大连船舶重工有限公司| 东莞市合辉精密机械设备有限公司| 临沂机械制造有限公司| 中山 机械有限公司| 东莞市台立数控机械有限公司| 华西钢铁有限公司电话| 昆成机械制造有限公司| 重庆屯茂机械有限公司| 丹阳市华泰制药机械有限公司| 北京恒博立华机械设备有限公司| 河南江河机械有限公司| 南通力福通起重机械有限公司| 恩格尔机械上海有限公司| 浙江三叶机械有限公司| 创宝包装机械有限公司| 江苏华澄重工有限公司| 浙江小伦制药机械有限公司| 宁波联成机械有限公司| 宁波民盛机械有限公司| 山东金奥机械有限公司| 郑州海特机械有限公司| 浙江大鹏机械有限公司| 河南省黄河防爆起重机有限公司 | 安阳钢铁贸易有限公司| 宁波 钢铁有限公司| 佛山钢铁贸易有限公司| 昆山博通机械设备有限公司| 上海腾迈机械有限公司| 青州泰达机械有限公司| 广州东昇机械有限公司| 浙江双鸟机械有限公司| 靖江市机械制造有限公司| 常州立达纺织机械有限公司 | 吴江机械设备有限公司| 深圳市环球同创机械有限公司 | 长春泰盟机械制造有限公司| 东莞市台铭数控机械有限公司| 扬州伏尔坎机械制造有限公司 | 鄂州鸿泰钢铁有限公司| 郑州机械设备有限公司| 包装机械制造有限公司| 玉环万全机械有限公司| 上海明硕机械有限公司| 宏信机械制造有限公司| 河北新金钢铁有限公司| 临海机械有限公司招聘| 瑞安市方泰机械有限公司| 浙江永创机械有限公司| 上海食品机械有限公司| 宁波机械配件有限公司| 东莞市瑞沧机械设备有限公司| 东莞市联顺机械有限公司| 山东华珠机械有限公司| 贵阳闽达钢铁有限公司| 广东恒联食品机械有限公司售后| 江苏贸隆机械制造有限公司| 山东通佳重工有限公司| 三明机械制造有限公司| 无锡凯希迪斯机械有限公司| 南通龙威机械有限公司| 国机铸锻机械有限公司| 泰钢钢铁贸易有限公司| 合肥中达机械制造有限公司 | 杭州三共机械有限公司| 山东化工机械有限公司| 浙江中兴机械制造有限公司| 河南星光机械有限公司| 保定 机械有限公司| 青岛金越隆机械有限公司| 重庆巨泰机械有限公司| 深圳数控机械有限公司| 上海鼎亚精密机械设备有限公司| 苏州首达机械有限公司| 丝网机械 有限公司| 宣城市建林机械有限公司| 山西太行钢铁有限公司| 山东山建机械有限公司| 成都松茂工程机械有限公司| 成都固特机械有限公司| 常州铭盈包装机械有限公司| 上海拓稳机械有限公司| 广东中远海运重工有限公司| 南京佳盛机械设备有限公司| 河北燕山钢铁有限公司| 建材有限公司起名大全| 宁波敏达机械有限公司| 郑州 机械 有限公司| 太仓健柏机械有限公司| 杭州传动机械有限公司| 洛阳高峰工程机械有限公司| 郑州宇通重工有限公司| 德枫丹青岛机械有限公司招聘| 中船重工重庆液压机电有限公司| 太仓倍加机械有限公司| 葛洲坝机械船舶有限公司| 西安机械设备有限公司| 上海新沪机械有限公司| 淄博机械制造有限公司| 耐驰上海机械仪器有限公司| 机械设备有限公司招聘| 青岛顺丰机械有限公司| 机械(苏州)有限公司| 沂水阳东机械有限公司| 保定机械制造有限公司| 武汉萱裕机械有限公司| 四川建筑机械有限公司| 青岛青宏机械制造有限公司| 广州市市政工程机械施工有限公司| 郑州华隆机械有限公司| 宝钢湛江钢铁有限公司| 东源精密机械有限公司| 宁波中机械有限公司| 广州甲宝机械有限公司| 芜湖科翔动力机械有限公司| 青岛塑料机械有限公司|