regex - 正则表达式,TextFSM - 匹配两个字符之间的内容,同时排除不需要的字符串列表
问题描述
开发者社区您好!
我目前正在开发一些 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.*)))
非常感谢您提前!
解决方案
您可以使用-rule\s*(\"(\\\"|[^\"])*\")
仅采用引用值作为参数的表达式-rule
,关键更改是
- 模式以
-rule
, - 如果零件在重复组中被转义,则消耗一个报价,并消耗一个额外的最终报价。
https://regex101.com/r/HoCM1v/1/
如果您还想包含不带引号的参数,您可以使用-rule\s*(\"(\\\"|[^\"])*\"|\S+)
,其中\S+
代表字符直到下一个空格。
推荐阅读
- android - UE4 断言在 opengles.h 中失败,但我知道 ue4 可以在我的设备上运行。如何解决?
- html - 在小缩略图和原始方面保留 Base64
- c++ - Opengl 像素坐标操作
- firebase - 下一个/图像 + Firebase 存储 403 读取时出错
- google-apps-script - 搜索匹配以自动填充文本输入谷歌表格
- asp.net - 如何使用 Azure DevOps 管道构建 ASP.NET 网站?
- javascript - props.location.state 返回未定义
- python - Django 将模型实例数据添加到 forms.py 中的小部件
- mysql - 为什么 sequelize-cli 不加载配置变量?
- angular - Firebase“不在”查询限制为 10 的 Angularfire 解决方法