Ruby 正则表达式过滤掉以 "string"后缀结尾的单词

标签 ruby regex gitlab

我正在尝试提出一个将匹配以下字符串的 Ruby 正则表达式:

MAINT: Refactor something
STRY-1: Add something
STRY-2: Update something

但不应匹配以下内容:

MAINT: Refactored something
STRY-1: Added something
STRY-2: Updated something

MAINT: Refactoring something
STRY-3: Adding something
STRY-4: Updating something

基本上,: 之后的第一个单词不应以 eding 结尾

这是我目前拥有的:

^(MAINT|(STRY|PRB)-\d+):\s([A-Z][a-z]+)\s([a-zA-Z0-9._\-].*)

我已经尝试过 [^ed][^ing] 但它们在这里不起作用,因为我的目标不仅仅是单个字符。

我无法想出一个合适的解决方案来实现这一目标。

最佳答案

你可以使用

^[-\w]+:\s*(?:(?!(?:ed|ing)\b)\w)+\b.+

参见 a demo on regex101.com .


分割如下:

^                     # start of the line/string
[-\w]+:\s*            # match - and word characters, 1+ then :
(?:                   # non-capturing group
    (?!(?:ed|ing)\b)  # neg. lookahead: no ed or ing followed by a word boundary
    \w                # match a word character
)+\b                  # as long as possible, followed by a boundary
.*                    # match the rest of the string, if any


我没有使用 Ruby 的经验,但我想您也可以进行拆分并检查第二个单词是否以 eding 结尾。对于 future 的程序员/同事来说,后一种方法可能更容易处理。

关于Ruby 正则表达式过滤掉以 "string"后缀结尾的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188358/

相关文章:

ruby - 为什么散列上的 ||= 重新分配错误值?

regex - 在 Perl 代码中改进(优化)现有字符串替换的任何建议?

rsa - 如何使用私钥从 Gitlab 下载私有(private)项目

docker - 如何让 gitlab-runner 从指定文件而不是 .gitlab-ci.yml 读取?

node.js - 使用 Gitlab 和 Heroku 进行 CI

ruby - 如何在使用 Ruby Mechanize 网络爬行时绕过网络错误

ruby - 为什么类方法不能与非类方法同名?

ruby - 用于匹配 <blockquote> 和 </blockquote> 之间的单词的正则表达式

regex - Htaccess 更改 php 扩展名

ruby - Array#uniq 与 Ruby 1.8.7 中的 block 等效