Regex 仅当不在行首附近时才匹配正则表达式

Regex 仅当不在行首附近时才匹配正则表达式,regex,regex-lookarounds,regex-negation,Regex,Regex Lookarounds,Regex Negation,对于正则表达式,我希望仅当模式不在行首附近时才使用负回溯来匹配模式。这是为了匹配紧跟在其他文本之后的VHDL注释,而不是紧跟在行首附近的注释,即前面没有其他文本,只有空格 例如,如果我的测试字符串是: -- BOL test; -- C1 test => -- C1 -- BOL indent 我想要一个正则表达式字符串: (?<!^\s*)-- 只匹配两个C1s前面的-in,忽略BOL前面的-in和BOL缩进。 但这需要可变长度的lookback,这在这个

对于正则表达式,我希望仅当模式不在行首附近时才使用负回溯来匹配模式。这是为了匹配紧跟在其他文本之后的VHDL注释,而不是紧跟在行首附近的注释,即前面没有其他文本,只有空格

例如,如果我的测试字符串是:

-- BOL
   test; -- C1
   test =>   -- C1
   -- BOL indent
我想要一个正则表达式字符串:

(?<!^\s*)--
只匹配两个C1s前面的-in,忽略BOL前面的-in和BOL缩进。 但这需要可变长度的lookback,这在这个正则表达式工具中是不受支持的。问题源于没有提前知道缩进将包含多少空格


有更好的方法吗?

一个选项是从字符串开头匹配0+个空格字符,然后至少匹配非-的非空格字符。然后在组中的字符串中进一步捕获

^[^\S\r\n]*[^\s-].*(--)

我假设您希望匹配'-'和行或字符串中的所有内容,前提是'-'前面有一个非空白字符

在对该问题的评论中指出,正则表达式引擎支持\K。\K导致正则表达式引擎放弃当前匹配中的所有内容,并将匹配的起点重置为字符串中的当前位置

\S.*\K--.*
我使用支持\K的PCRE PHP正则表达式引擎对此进行了测试


如果不想在匹配中包含“-”,请使用\S.*-\K.*或\S.*-\S*\K..

您使用的是什么语言?它的正则表达式引擎是否支持\K,这大致意味着忘记所有匹配的内容?与其匹配字符串的一部分,您是否可以将感兴趣的字符串部分保存到捕获组?这实际上是在名为AlignTab的Sublime Text 3插件中使用的,因此不是直接使用。也就是说,支持\K。