我看到了一个使用\ K 的问题,该问题存在于Notepad ++ / pcre / PHP(重置匹配起始点)中。但是,在“掌握正则表达式”或“正则表达式食谱”中找不到此选项或其等效项。
如何跳过指定数量的字符?我使用Expresso在^。{15}上执行了替换操作,从而消除了前15个。
在PCRE中,Oniguruma,Boost,ICU regex调味品\K
是一种回溯构造:
此构造有一种特殊形式,称为
\K
(从Perl 5.10.0开始可用),它使regex引擎“保留”在之前匹配的所有内容\K
,而不将其包括在中$&
。这有效地提供了变长后向。采用\K
的另一种环视断言内部允许的,但行为目前还没有很好的定义。
在.NET中,\K
由于后面具有可变宽度(或无限宽度),因此是不必要的。
(?<=subexpression)
是肯定的断言;也就是说,当前位置之前的一个或多个字符必须与subexpression匹配。
要匹配前15个任意字符后的数字,请使用
(?<=^.{15})\d
观看演示
不要忘记使点与换行符匹配,您需要使用RegexOptions.Singleline
。
来自rexegg.com的注释:
.NET(C#,VB.NET等)和Matthew Barnett的python 正则表达式模块是唯一支持无限宽的后向编程语言。
另外,作为奖励:您当前的要求并不意味着您依赖于后面无限的宽度。只需使用捕获组:
var s = Regex.Replace("1234567890123456", @"^(.{15})\d", "$1*");
最后的6
将被替换,*
开始的将被使用$1
反向引用恢复到结果字符串中。