正则表达式、TextFSM - 匹配两个字符之间的内容,同时排除不需要的字符串列表
Regex, TextFSM - Match content between two characters while excluding unwanted list of strings
开发者社区您好!
我目前正在开发一些 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 关键字后编写一个匹配 any 内容的正则表达式。开始和结束双引号之间的内容可以包含更多的双引号。
"HTTP.REQ.COOKIE.VALUE(\"JSESSIONID\")"
我的问题是,如果在 -rule 关键字之后定义了一个可选的 -resRule 关键字,并且在-resRule关键字也包含双引号,内容匹配包括-rule和-resRule关键字后的内容。
当开始和结束双引号之间的内容包含任何关键字时,是否可以定义一个“不需要的”关键字列表,匹配在不需要的关键字之前的最后一个双引号处结束?
例如,
我正在尝试使用先行和非捕获组,但没有运气。
https://regex101.com/r/UkPr05/1
(((\")(.*)(\"))(?:( -resRule.*)))
非常感谢您!
您可以使用表达式 -rule\s*(\"(\\"|[^\"])*\")
,它只接受参数 -rule
的引用值,关键变化是
- 模式以
-rule
、 开头
- 如果在重复组中被转义,部件会消耗一个引号,
并消耗额外的最终报价。
https://regex101.com/r/HoCM1v/1/
如果您还想包括未加引号的参数,您可以使用 -rule\s*(\"(\\"|[^\"])*\"|\S+)
,其中 \S+
代表字符到下一个 space。
您可以匹配 -rule\s*
后跟可选的空白字符和 "
然后匹配除 "
以外的任何字符或匹配转义字符后跟结尾的 "
匹配 do -resRule
将不匹配部分匹配项。
-rule\s*"([^"\]*(?:\.[^"\]*)*)"
开发者社区您好!
我目前正在开发一些 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 关键字后编写一个匹配 any 内容的正则表达式。开始和结束双引号之间的内容可以包含更多的双引号。
"HTTP.REQ.COOKIE.VALUE(\"JSESSIONID\")"
我的问题是,如果在 -rule 关键字之后定义了一个可选的 -resRule 关键字,并且在-resRule关键字也包含双引号,内容匹配包括-rule和-resRule关键字后的内容。
当开始和结束双引号之间的内容包含任何关键字时,是否可以定义一个“不需要的”关键字列表,匹配在不需要的关键字之前的最后一个双引号处结束?
例如,
我正在尝试使用先行和非捕获组,但没有运气。
https://regex101.com/r/UkPr05/1
(((\")(.*)(\"))(?:( -resRule.*)))
非常感谢您!
您可以使用表达式 -rule\s*(\"(\\"|[^\"])*\")
,它只接受参数 -rule
的引用值,关键变化是
- 模式以
-rule
、 开头
- 如果在重复组中被转义,部件会消耗一个引号, 并消耗额外的最终报价。
https://regex101.com/r/HoCM1v/1/
如果您还想包括未加引号的参数,您可以使用 -rule\s*(\"(\\"|[^\"])*\"|\S+)
,其中 \S+
代表字符到下一个 space。
您可以匹配 -rule\s*
后跟可选的空白字符和 "
然后匹配除 "
以外的任何字符或匹配转义字符后跟结尾的 "
匹配 do -resRule
将不匹配部分匹配项。
-rule\s*"([^"\]*(?:\.[^"\]*)*)"