正規表示式如何處理巢狀結構

2022-11-03 13:36:03 字數 1424 閱讀 7782

正規表示式如何處理巢狀結構a..net處理巢狀結構的方法舉例說明:

問題描述:從before (nope(yes (here) okay)after中匹配得到最大的被」()」包含的文字。即顯示紅色的部分。

答案:.net:\((?>)|\)(?<-depth>))*(?(depth)(?!))\)分析:

(1)、\(匹配左括號;\)匹配右括號;[^()]+匹配非括號字串(2)、(?>….)固化分組,固化分組的作用在於:

一旦括號內的子表示式匹配之後,匹配的內容就固定下來,在接下來的匹配過程中不會改變,除非整個固化分組的括號都被棄用,在外部回溯中重新應用。該處使用固化分組的作用在於提高匹配速度。

(3)、depth的使用:depth實際使用了命名捕獲的<?>…>,它總是能夠匹配成功。

正規表示式引擎的回溯堆疊儲存了當前匹配成功分組的相關資訊,而(?)跟在\(後,所以它的成功匹配便可以儲存\(的個數。跟隨在\)後的結構(?

<-depth>)是.net獨有的結構,它會在匹配\)成功之後去掉最近的」successful depth」標記。如果不存在這樣的」successful depth」標記,就會報告失敗,整個正規表示式匹配失敗:

1,每匹配乙個\(會把正規表示式儲存的當前括號巢狀深度值加1;2,每匹配乙個\)會把正規表示式儲存的當前括號巢狀深度值減1;3,(?(depth)(?!))確保匹配最後的\)時,深度為0。

2,如何使用正規表示式處理句法分析樹

如何使用正規表示式識別一棵類似如下表示的句法分析樹?

(top (s (npb (dt the) (nn question) ) (vp (vbz remains) (sbar-a (in whether) (s-a (npb(prp they) ) (vp (md will) (vp-a (vb be) (adjp (jj able) (sg (vp (to to) (vp-a (vb help)(punc. us

答案:\((?>s]+\s(?)|\)\s(?<-depth>))*(?(depth)(?!))\)分析類似。

3,使用正規表示式處理句法分析樹實

例a.使用正規表示式獲取所有的葉結點:\((?[^()]+)\s(?[^()]+)\)b.使用正規表示式獲取所有的名詞短語np:

\(np\s(?>s]+\s(?)|\)\s(?<-depth>))*(?(depth)(?!))\)

c.使用正規表示式獲取滿足如下性質的子樹

該子句的標記為sbar[^()]*

ii.該子句根節點的第乙個兒子為乙個詞性為in的詞。iii.該子句的第二個兒子為乙個子句:使用s[^()]*識別iv.該子句沒有其他的兒子

i.(?\(s[^() ]*\s(?

\(in\s[^()]+\)\s)(?\(s[^() ]*\s(?>s]+\s(?

)|\)\s(?<-depth>))*(?(depth)(?!

))\)\s)\)\s(?#clause))

正規表示式

c 正規表示式經典分類整理集合手冊 作者 發布日期 2009 03 27 有一段時間,正規表示式學習很火熱很潮流,當時在csdn一天就能看到好幾個正規表示式的帖子,那段時間借助論壇以及wrox press出版的 c 字串和正規表示式參考手冊 學習了一些基礎的知識,同時也為我在csdn大概賺了1000...

常用正規表示式

漢字 u4e00 u9fff 考證數字 0 9 考證n位的數字 d 考證至多n位數字 d 考證m n位的數字 d 考證零和非零開頭的數字 0 1 9 0 9 考證有兩位小數的正實數 0 9 0 9 考證有1 3位小數的正實數 0 9 0 9 考證非零的正整數 1 9 0 9 考證非零的負整數 1 9...

正規表示式詳細

正規表示式是一種文字模式,包括普通字元 例如,a 到 z 之間的字母 和特殊字元 稱為 元字元 模式描述在搜尋文字時要匹配的乙個或多個字串。下面是正規表示式的一些示例 表示式匹配 s 匹配空行。d d 驗證由兩位數字 乙個連字元再加 5 位數字組成的 id 號。s s s s s s 1 s 匹配 ...