具有负前瞻性的正则表达式确实适用于零个或多个前面的空格
Regex with negative lookahead does work with zero or more preceeding whitespaces
我正在尝试了解如何在 \s*:?\s*
系列之后执行否定前瞻。现在它会导致不需要的匹配,所以我不得不使用 \s*:?\s+
,但它不包括某些情况,例如todo:match
.
我为什么需要这个:有一个 todo 注释检查是源代码分析工具,我想禁止使用普通 TODO 注释,但保留使用链接票证编写 todo 注释的能力。
tl;dr:我想让顶级示例无与伦比,但匹配所有底部示例。
加星:
没有加星:
来源:
Debuggex Demo
(?ix)(?:fixme|todo)
\s*(?::|-|--)?\s+
(?!(?:(?:https|http):\/\/)?(?:www\.)?jira\.company\.com|\w+-\d+)
测试数据:
TODO: AS-123 no match
todo: as-123 no match
fixme: https://jira.company.com/browse/AS-14965 no match
fixme: https://jira.company.com
fixme as-123 no match
todo:as-123 no match
todo match
todo match
todo:match
todo :match
todo123
todo : match
todo: match
fixme: match
todo: match https://jira.company.com/
你可以使用原子组,语法是(?>abc)
,它会禁止回溯和"solidify"第一次\s*:\s*
部分它由正则表达式引擎读取。
(?i)(todo|fixme)(?>\s*:?\s*)(?!http|\w+-\d+).*
(我简化了jira部分,你可以根据需要升级)
根据您的意见,您希望只允许在 TODO 语句后加上票号或 URL。这自然会根据工单的结构而有所不同,但以下应该有效。正则表达式假设您 运行 它们不区分大小写。
此正则表达式将匹配任何有效待办事项:(?:todo|fixme):?\s*(?:\w+\-\d+|https\S*)
(Demo)
这个正则表达式将匹配任何无效待办事项:(?:todo|fixme)\s*:?\s*(?!http\S*)(?!.*\w+\-\d+).*$
(Demo)这使用环视来确保票证或URL的模式是没有出现在比赛中。
不过我不确定 fixme: https://jira.company.com
和 todo: match https://jira.company.com/
有何不同 - 第二个正则表达式匹配两者。
我正在尝试了解如何在 \s*:?\s*
系列之后执行否定前瞻。现在它会导致不需要的匹配,所以我不得不使用 \s*:?\s+
,但它不包括某些情况,例如todo:match
.
我为什么需要这个:有一个 todo 注释检查是源代码分析工具,我想禁止使用普通 TODO 注释,但保留使用链接票证编写 todo 注释的能力。
tl;dr:我想让顶级示例无与伦比,但匹配所有底部示例。
加星:
没有加星:
来源: Debuggex Demo
(?ix)(?:fixme|todo)
\s*(?::|-|--)?\s+
(?!(?:(?:https|http):\/\/)?(?:www\.)?jira\.company\.com|\w+-\d+)
测试数据:
TODO: AS-123 no match
todo: as-123 no match
fixme: https://jira.company.com/browse/AS-14965 no match
fixme: https://jira.company.com
fixme as-123 no match
todo:as-123 no match
todo match
todo match
todo:match
todo :match
todo123
todo : match
todo: match
fixme: match
todo: match https://jira.company.com/
你可以使用原子组,语法是(?>abc)
,它会禁止回溯和"solidify"第一次\s*:\s*
部分它由正则表达式引擎读取。
(?i)(todo|fixme)(?>\s*:?\s*)(?!http|\w+-\d+).*
(我简化了jira部分,你可以根据需要升级)
根据您的意见,您希望只允许在 TODO 语句后加上票号或 URL。这自然会根据工单的结构而有所不同,但以下应该有效。正则表达式假设您 运行 它们不区分大小写。
此正则表达式将匹配任何有效待办事项:(?:todo|fixme):?\s*(?:\w+\-\d+|https\S*)
(Demo)
这个正则表达式将匹配任何无效待办事项:(?:todo|fixme)\s*:?\s*(?!http\S*)(?!.*\w+\-\d+).*$
(Demo)这使用环视来确保票证或URL的模式是没有出现在比赛中。
不过我不确定 fixme: https://jira.company.com
和 todo: match https://jira.company.com/
有何不同 - 第二个正则表达式匹配两者。