1

开发者社区您好!

我目前正在开发一些 Ansible 剧本来管理 Citrix NetScaler 配置,并希望就以下问题寻求一些帮助。

我有以下配置行,我想用 TextFSM 解析:

add lb vserver VS_ssl_443_testapps SSL 0.0.0.0 0 -persistenceType RULE -timeout 30 -rule "HTTP.REQ.COOKIE.VALUE(\"JSESSIONID\")" -resRule "HTTP.RES.SET_COOKIE.COOKIE(\"JSESSIONID\").VALUE(\"JSESSIONID\")" -cltTimeout 600 -td 1

我需要在-rule关键字之后编写一个匹配双引号之间任何内容的正则表达式。开始和结束双引号之间的内容可以包含更多的双引号。

"HTTP.REQ.COOKIE.VALUE(\"JSESSIONID\")"

我的问题是,如果在-rule关键字之后定义了可选的-resRule关键字并且-resRule关键字之后的文本也包含双引号,则内容匹配包括 -rule 和 -resRule 关键字之后的内容。

当开始和结束双引号之间的内容包含任何关键字时,是否可以定义“不需要的”关键字列表,匹配在不需要的关键字之前的最后一个双引号处结束?

例如,

在此处输入图像描述

我正在尝试使用前瞻和非捕获组,但没有运气。

https://regex101.com/r/UkPr05/1

(((\")(.*)(\"))(?:( -resRule.*)))

非常感谢您提前!

4

2 回答 2

3

您可以使用-rule\s*(\"(\\\"|[^\"])*\")仅采用引用值作为参数的表达式-rule,关键更改是

  1. 模式以-rule,
  2. 如果零件在重复组中被转义,则消耗一个报价,并消耗一个额外的最终报价。

https://regex101.com/r/HoCM1v/1/

如果您还想包含不带引号的参数,您可以使用-rule\s*(\"(\\\"|[^\"])*\"|\S+),其中\S+代表字符直到下一个空格。

于 2021-02-10T13:01:48.463 回答
0

您可以匹配-rule\s*后跟可选的空白字符和"

然后匹配除"或匹配转义字符之外的任何字符,然后匹配最后的关闭"-resRule不会匹配部分匹配项。

-rule\s*"([^"\\]*(?:\\.[^"\\]*)*)"

正则表达式演示

于 2021-02-10T18:16:24.303 回答