[英]Difficulty with Simple Regex (match prefix/suffix)
我正在嘗試開發一個將在C#程序中使用的正則表達式。
我最初的正則表達式是:
(?<=\()\w+(?=\))
哪個成功地匹配“(foo)” - 匹配但是從輸出中排除開放和關閉的parens,以產生簡單的“foo”。
但是,如果我將正則表達式修改為:
\[(?<=\()\w+(?=\))\]
我嘗試匹配“[(foo)]”它無法匹配。 這是令人驚訝的。 我只是在我的前一個表達式前面添加和附加文字的開括號和閉括號。 我很難過。 我使用Expresso來開發和測試我的表達式。
在此先感謝您的幫助。
羅伯塞西爾
你的后視是問題所在。 以下是字符串的處理方式:
至少那就是我猜的是導致問題的原因。
試試這個正則表達式:
(?<=\[\()\w+(?=\)\])
脫離背景,很難判斷,但這里的后衛可能有點過分。 它們對於排除字符串很有用(例如在strager的例子中)以及在簡單RE失敗的其他特殊情況下,但我經常看到它們用於更簡單的表達式更容易編寫,更多RE風格並且可能更快的情況。
在你的情況下,你可以編寫(\\b\\w+\\b)
例如,甚至(\\w+)
使用自然邊界,或者如果你想區分(foo)和-foo-(例如),使用\\((\\w+)\\)
。
現在,也許上下文決定了這種錯綜復雜的用法(或者你可能只是嘗試了后視),但知道替代方案是很好的。
現在,如果你只是好奇為什么第二個表達式不起作用:這些被稱為“零寬度斷言”:它們檢查后面或前面的內容是否符合預期,但它們不消耗字符串所以在它們之后(或之前,如果是否定的)它們必須匹配斷言。 例如。 如果你在積極前瞻之后放了一些與斷言不匹配的東西,你肯定RE會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.