正则表达式匹配后

时间:2016-11-21 20:37:03

标签: regex pcre

我想知道如何只在匹配某个字符串的行的开头捕获文本...但我不想捕获开始字符串...

例如,如果我有文字:

  

BEGIN_TAG:要捕获的文字

     

WRONG_TAG:不捕获文字

我想拍摄:

  

要捕获的文字

从以BEGIN_TAG开头的行:不是以WRONG_TAG开头的行:

我知道如何选择以所需文字开头的行:^ BEGIN_TAG:\ W?(。*)

但是这会选择文字" BEGIN_TAG:" ...我不希望这只想要" BEGIN_TAG"

之后的文字

我正在使用PCRE正则表达式

2 个答案:

答案 0 :(得分:3)

您可以使用匹配重置运算符grep,而不是不允许未知宽度模式的正向外观:

\K

请参阅regex demo

<强>详情:

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

答案 1 :(得分:2)

您可以使用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