我想知道如何只在匹配某个字符串的行的开头捕获文本...但我不想捕获开始字符串...
例如,如果我有文字:
BEGIN_TAG:要捕获的文字
WRONG_TAG:不捕获文字
我想拍摄:
要捕获的文字
从以BEGIN_TAG开头的行:不是以WRONG_TAG开头的行:
我知道如何选择以所需文字开头的行:^ BEGIN_TAG:\ W?(。*)
但是这会选择文字" BEGIN_TAG:" ...我不希望这只想要" BEGIN_TAG"
之后的文字我正在使用PCRE正则表达式
答案 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