单词后的正则表达式匹配
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.*
详情:
^
- 在 Sublime 中,一行的开头
BEGIN_TAG:
- 一串文字字符
\W?
- 1 或 0 个非单词字符
\K
- 丢弃目前匹配的所有文本的匹配重置运算符
.*
- 除换行符(行的其余部分)之外的任何 0+ 个字符,它们是匹配文本中唯一保留的字符。
我想知道如何仅在行首与特定字符串匹配时才捕获文本...但我不想捕获开头字符串...
例如,如果我有文本:
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.*
详情:
^
- 在 Sublime 中,一行的开头BEGIN_TAG:
- 一串文字字符\W?
- 1 或 0 个非单词字符\K
- 丢弃目前匹配的所有文本的匹配重置运算符.*
- 除换行符(行的其余部分)之外的任何 0+ 个字符,它们是匹配文本中唯一保留的字符。