[英]Cannot match parentheses in regex group
這是一個正則表達式,在.NET中評估
我有以下輸入:
${guid->newguid()}
我想產生兩個匹配的組,即${
和}
之前的字符序列,它們由->
分開:
我使用的模式如下:
([^(?<=\${)(.*?)(?=})->]+)
但這與括號不匹配,我只得到以下匹配:
如何修改正則表達式,以便獲得所需的組?
您的正則表達式- ([^(?<=\\${)(.*?)(?=})->]+)
-匹配除負字符類中定義的字符以外的1+個字符(即1個或多個)除(
, ?
, <
等)以外的其他字符。
我建議使用匹配的正則表達式,如下所示:
\${([^}]*?)->([^}]*)}
您需要的結果在match.Groups[1]
和match.Groups[2]
。
圖案細節 :
\\${
-匹配${
文字字符序列 ([^}]*?)
-組1捕獲除}
以外的0+個字符 ->
-文字字符序列->
([^}]*)
-組2盡可能捕獲除}
以外的0+個字符 }
-文字}
。 如果您知道里面只有字字符,則可以將正則表達式簡化為
\${(\w+)->(\w+\(\))}
參見regex演示 。 但是,它的通用性要差得多。
您的輸入結構始終是${identifier->identifier()}
? 在這種情況下,您可以使用^\\$\\{([^-]+)->([^}]+)\\}$
。
否則,您可以將regexpr修改為([^?<=\\${.*??=}\\->]+)
:使用此rexexpr,您應該匹配輸入並獲得所需的組: uid
和newguid()
。 關鍵的變化是引用-
炭,這是intendend為運營商范圍內無報價和力量你在模式中插入括號-但是...... [^......(....)....]
從比賽中排除括號。
希望能有所幫助!
編輯:使用https://regex101.com進行的測試對我很有幫助...向我展示了-
用作范圍運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.