单词后的正则表达式匹配

regex match after word

我想知道如何仅在行首与特定字符串匹配时才捕获文本...但我不想捕获开头字符串...

例如,如果我有文本:

BEGIN_TAG: Text To Capture

WRONG_TAG: Text Not to Capture

我要捕捉:

Text To Capture

来自BEGIN_TAG开头的行:不是WRONG_TAG开头的行:

我知道如何 select 以所需文本开头的行:^BEGIN_TAG:\W?(.*)

但是这个 select 是文本“BEGIN_TAG:”...我不想要这个只想要“BEGIN_TAG”之后的文本“

我正在使用 PCRE 正则表达式

您可以使用 lookbehind。然后,lookbehind 组中的文本不是整个匹配的一部分。你可以把它看成像 \b, ^, 等的锚

然后你得到:

(?<=^BEGIN_TAG:\W)(\w.*)$

解释:

(?<=             # Positive lookbehind group
    ^            # Start of line / string
    BEGIN_TAG:   # Literal
    \W           # A non-word character ([^a-zA-Z_])
)
(                # First and only matching group (probably not needed)
    \w           # A word character ([a-zA-Z_])
    .*           # Any character, any number of times
)
$                # End of line / string

您可以使用匹配重置运算符,而不是不允许未知宽度模式的正后视 \K:

^BEGIN_TAG:\W?\K.*

regex demo

详情:

  • ^ - 在 Sublime 中,一行的开头
  • BEGIN_TAG: - 一串文字字符
  • \W? - 1 或 0 个非单词字符
  • \K - 丢弃目前匹配的所有文本的匹配重置运算符
  • .* - 除换行符(行的其余部分)之外的任何 0+ 个字符,它们是匹配文本中唯一保留的字符。