这是一个正则表达式,在.NET中进行评估
我有以下输入:
get-host
我想生成两个匹配的组,${guid->newguid()}
之后和${
之前的字符序列,由}
分割:
我使用的模式如下:
->
但是这与括号不符,我只得到以下匹配:
如何修改正则表达式以便获得所需的组?
答案 0 :(得分:1)
你的正则表达式 - ([^(?<=\${)(.*?)(?=})->]+)
- 匹配除了否定字符类中定义的字符之外的1 +个字符(即除(
之外的一个或多个字符,?
,{{1等等)。
我建议使用匹配的正则表达式:
<
请参阅regex demo
您需要的结果位于\${([^}]*?)->([^}]*)}
和match.Groups[1]
。
模式详情:
match.Groups[2]
- 匹配\${
文字字符序列${
- 第1组尽可能少地捕获除([^}]*?)
以外的0个字符}
- 文字字符序列->
->
- 第2组尽可能多地捕获除([^}]*)
以外的0 +字符}
- 文字}
。如果您知道内部只有 word 字符,则可以将正则表达式简化为
}
请参阅regex demo。但是,它不那么通用了。
答案 1 :(得分:1)
您的输入结构始终为${identifier->identifier()}
?如果是这种情况,您可以使用^\$\{([^-]+)->([^}]+)\}$
。
否则,您可以将 regexpr 修改为([^?<=\${.*??=}\->]+)
:使用此 rexexpr ,您应该匹配输入并获取所需的组:uid
和newguid()
。 密钥更改是-
char的引用,它在没有引用的情况下作为 range 运算符,并强制您在模式中插入括号 - 但是...... [^......(....)....]
从比赛中排除括号。
我希望能帮到你!
编辑:使用https://regex101.com进行测试对我有很大帮助......告诉我-
是范围运算符。