我試圖解析出一個類型的屬性(如:單詞「CUSIP」,「發行人」,和「優惠券」),如下所示:邊界範圍的多個匹配帶單文本
Public Type GetPricesResponse
Cusip As String
Issuer As String
Coupon As String
End Type
正則表達式([a-zA-Z0-9]+).+As
適用於此代碼片段(請參閱http://regexr.com?300fl),但與大量代碼混合使用時可能無法正常工作。所以,我一直試圖「結合」這個表達式,並在最後的話Public Type
放在前面,並End Type
來具體確定什麼,我需要如下:
Public\sType\s([a-zA-Z0-9]+).+As.+End\sType
...但當然再沒有按不匹配任何東西。
我也設置了MultiLine選項。
你最好使用兩個正則表達式,一個相匹配的類型聲明,接着又反覆匹配前面的正則表達式的截取部分中的屬性。 – Cameron 2012-02-13 21:32:14
我喜歡這種簡單。但是這增加了我想要創建的引擎的複雜性。雖然這個例子需要2個正則表達式來查找相關文本,但是另一個示例可能需要4個正則表達式,或者可能更多。 我希望得到一個一體化解決方案來簡化事情。由於「(\ w +)as」完全匹配所有3個屬性,因此爲什麼「Type \。+(\ w +)as \。+ End」與它們匹配呢?這是RegEx引擎邏輯的缺陷,還是我腦中的邏輯不足? (不要回答!)如果你能解釋爲什麼這不起作用的推理,我會很感激! – BigAl 2012-02-17 22:06:42
你的正則表達式中只有一個'(\ w +)';所以它只匹配部分字符串。但即使你重複了內部部分,你也只能成功確定整個字符串是否匹配 - 沒有辦法獲得重複組捕獲的所有值(這是正則表達式的限制)。確切說明你的原始正則表達式的作用:首先找到'公共類型'的第一次出現。然後從該位置匹配儘可能多的字母數字字符(並將它們捕獲到一個組中)。 '。+'到達字符串的末尾,此時... – Cameron 2012-02-17 22:34:59