在lookbehind的模式

时间:2014-01-08 11:20:11

标签: regex lookbehind

我的问题与 lookbehinds 有关,我想找到“this”之后的所有第一个数字,我有以下数据:

188282这是一个数字12345和54321的例子 188282这是一个数字1234556的例子 这是一个数字1234556的例子 187293这是数字74893和83978的另一个例子

模式:

this is an example of a number \d+

输出

188282 this is an example of a number 12345和54321
188282 this is an example of a number 1234556
this is an example of a number 1234556
187293这是数字74893和83978的另一个例子

为了匹配所有这些,我使用了更通用的方法,因为我知道我想要在“this”这个词之后的第一个数字

模式:

this[^\d]+\d+

输出

188282 this is an example of a number 12345和54321
188282 this is an example of a number 1234556
this is an example of a number 1234556
187293 this is another example of a number 74893和83978

现在我想使用lookbehinds,因为我不想在结果中包含部分模式。按照我的第一个方法:

模式:

(?<=this is an example of a number )\d+

输出

188282这是一个数字12345和54321的例子 188282这是一个数字1234556的例子 这是一个数字1234556的示例 187293这是数字74893和83978的另一个例子

看起来我到了那里,我想像以前一样报道最后一个案例,所以我尝试了第二种方法。

模式:

(?<=this[^\d]+)\d+

输出

188282这是一个数字12345和54321的例子 188282这是一个数字1234556的例子 这是一个数字1234556的例子 187293这是数字74893和83978的另一个例子

与任何事物都不匹配 是否可以在lookbehinds内部设置图案?我是否尝试过这个问题的错误方法?这有点长,但我想告诉你到目前为止我尝试了什么,而不只是问问题

提前致谢

3 个答案:

答案 0 :(得分:2)

是的,你可以在lookbehinds中使用模式,但是在大多数正则表达式中你不能做的就是拥有一个可变长度的lookbehind。换句话说,你不能在lookbehind中使用量词(但允许使用像{n}这样的固定量词)。但是一些正则表达式允许您使用交替|或有限(如java)量词{1,n}

使用.net语言,允许使用可变长度的lookbehind。

答案 1 :(得分:1)

具有lookbehinds的东西是并非所有语言都支持可变宽度的lookbehinds(它们不支持lookbehinds,其中的内部可以是可变数量的字符)。

你可以做的,可能是使用前瞻和捕获组:

(?=this[^\d]+(\d+))

regex101 demo

或者重置匹配的\K正则表达式字符(如果你的正则表达式引擎支持它)。

this[^\d]+\K\d+

regex101 demo

答案 2 :(得分:0)

这取决于你的正则表达式的实现。你肯定要做一些测试。

我知道有些实现不喜欢这样:

(?<=\d{1,5})(?<=\w*)

但是他们可以正常工作:

(?<=\d{5})(?<=\w{1000})

换句话说,没有重复或灵活的长度。