背景:
**我想要一个正则表达式,可以识别何时Gherkin语句写得不正确。**文本将是多行的。不幸的是,我不能使用代码解决方案来解决这个问题,它必须是PCRE正则表达式。
通过阅读小 cucumber 关键词文档,正确的结构顺序如下:Feature > Rule (optional) > Background (Optional) > Examples/Scenarios (Optional) that contains > [One or more](Example/Scenario) that contains > Given > [One or more of any] When|Then|But|(And/*)
备注:
Scenarios/Examples
、Scenario/Example
、AND/*
表示它们是别名- 为清楚起见,必须存在一个或多个
Scenario/Example
,无论是否存在Scenarios/Examples
可选“容器”
问题:
- 我试图使用积极的情况(正确的格式匹配)来解决这个问题,并计划一旦我得到了否定的工作。
我尝试了非捕获组和消极的前瞻,但没有成功。例如,下面的代码将在Rule
和Background
之间匹配Scenario/Example
,这不应该对正情况起作用。我的团队似乎太贪婪了?我不知道如何解决它,或者是否应该以不同的方式解决。
尝试使用非捕获组:
(Feature:[\s\S]+?)(?:Rule:[\s\S]+?)?(?:Background:[\s\S]+?)?(Scenario:[\s\S]+?)(Given:[\s\S]+?)(When|Then|And|\*)[\s\S]*?((?=(Scenario|Feature|$)))
部分尝试使用负前瞻来测试开始订单:
(Feature:[\s\S]+)(?=(Rule:[\s\S]+)?)(?=(Background:[\s\S]+)?)(?=(Scenario:[\s\S]+)*)
正确的小 cucumber 格式示例:
Feature: Web Searching
As a business analyst, I want to use a public search engine to find information.
Rule: The browser used must be X
Background:
Given a user has an information need
And the browser X is installed on their device
Scenario: Simple search
Given a web browser is on the search page
When the search phrase "stackoverflow" is entered
Then results for "stackoverflow" are shown
And the user can choose a result from a list
1条答案
按热度按时间jv2fixgn1#
与
%g
不匹配的字符串就是^(?!%g$)
,就是这样。我能够用以下Dimava的正则表达式语法生成匹配的正则表达式:
导致正则表达式
您可以在https://regex101.com/r/hbLJc3/1上测试它
(you如果要使用编译器,需要在regex101页面上的浏览器控制台中运行代码段)
如果缺少您希望工作的用例,请将它们添加到“测试用例”中,并使用更新的regex101链接进行注解
更新到https://regex101.com/r/zmgSNK/1
结果为https://regex101.com/r/PhSdY7/1