我看到一个question使用了记事本++ / pcre / PHP中的\ K(重置起始点)。但是,我无法在Mastering Regular Expressions或Regular Expression Cookbook中找到此选项或其等价物。
如何跳过指定数量的字符?我用Expresso做了一个替换^。{15},这消除了前15个。我是在正确的轨道上,还是有更好的方法?
答案 0 :(得分:5)
在PCRE,Oniguruma,Boost,ICU正则表达口味\K
is a kind of a lookbehind construct:
这种构造有一种特殊形式,称为
\K
(自Perl 5.10.0起可用),它使正则表达式引擎能够保持"保持"它在\K
之前匹配的所有内容,并未包含在$&
中。 这有效地提供了可变长度的后视 。允许在另一个环视断言中使用\K
,但目前行为尚未明确定义。
在.NET中,\K
不是必需的,因为它有variable-width (or infinite-width) lookbehind。
(?<=subexpression)
是一个积极的外观断言;也就是说,当前位置之前的一个或多个字符必须与子表达式匹配。
要匹配前15个任意字符后的数字,请使用
(?<=^.{15})\d
请参阅demo
不要忘记,为了使点匹配换行符,您需要使用RegexOptions.Singleline
。
来自rexegg.com的说明:
支持无限宽度外观的唯一两种编程语言风格是.NET(C#,VB.NET,...)和Matthew Barnett的regex module用于Python。
作为奖励:您当前的要求并不意味着您依赖于无限宽度的后视。只需使用捕获组:
var s = Regex.Replace("1234567890123456", @"^(.{15})\d", "$1*");
最后6
将替换为*
,并使用$1
反向引用在结果字符串中恢复开头。
答案 1 :(得分:2)
尝试(?<=.{15}).+
。
答案 2 :(得分:1)
技术上不会跳过这些角色,因为它们被消耗并被视为匹配的一部分。如果您想跳过这些字符,那么您需要了解一下
(?<=(.){15})