簡體   English   中英

無法匹配正則表達式組中的括號

[英]Cannot match parentheses in regex group

這是一個正則表達式,在.NET中評估

我有以下輸入:

${guid->newguid()}

我想產生兩個匹配的組,即${}之前的字符序列,它們由->分開:

  • GUID
  • newguid()

我使用的模式如下:

([^(?<=\${)(.*?)(?=})->]+)

但這與括號不匹配,我只得到以下匹配:

  • GUID
  • newguid

如何修改正則表達式,以便獲得所需的組?

您的正則表達式- ([^(?<=\\${)(.*?)(?=})->]+) -匹配除負字符類中定義的字符以外的1+個字符(即1個或多個)除(?<等)以外的其他字符。

我建議使用匹配的正則表達式,如下所示:

\${([^}]*?)->([^}]*)}

正則表達式演示

您需要的結果在match.Groups[1]match.Groups[2]

圖案細節

  • \\${ -匹配${文字字符序列
  • ([^}]*?) -組1捕獲除}以外的0+個字符
  • -> -文字字符序列->
  • ([^}]*) -組2盡可能捕獲除}以外的0+個字符
  • } -文字}

如果您知道里面只有字符,則可以將正則表達式簡化為

\${(\w+)->(\w+\(\))}

參見regex演示 但是,它的通用性要差得多。

您的輸入結構始終是${identifier->identifier()} 在這種情況下,您可以使用^\\$\\{([^-]+)->([^}]+)\\}$

否則,您可以將regexpr修改為([^?<=\\${.*??=}\\->]+) :使用此rexexpr,您應該匹配輸入並獲得所需的組: uidnewguid() 關鍵變化是引用-炭,這是intendend為運營商范圍內無報價和力量你在模式中插入括號-但是...... [^......(....)....]從比賽中排除括號。

希望能有所幫助!

編輯:使用https://regex101.com進行的測試對我很有幫助...向我展示了-用作范圍運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM