具有正向前瞻/后看的正则表达式

时间:2015-06-19 07:57:24

标签: regex

如何将所有以下字符串与单个正则表达式匹配?

这是我尝试过的正则表达式:(?<=.+)site(?=.+)

请注意,更简单的正则表达式可能会起到作用,但重点是了解正则表达式的(?<=.+)(?=.+)部分的作用。

locationAsite1
locationAsiteNumber1
locationAsiteNumber01
locationAsite01
locationBsite.01
locationB.site.02
(locationB)site.02
<locationB>site<03>s
..locationB..site<03>

2 个答案:

答案 0 :(得分:3)

你的正则表达式也可以写成,

(?<=.)site(?=.)

这意味着,字符串site必须前后跟至少一个字符。

C#系列外,大多数语言都不支持可变长度的后视。

(?<=.+)site(?=.+)

表示子字符串site必须前后跟一个或多个字符。也就是说,它只会匹配字符串site,如果它位于中间,而不是它出现在开头或结尾。

答案 1 :(得分:2)

积极的背后隐藏意味着必须匹配(<= )中的表达式。

例如,如果您说(?<=A)site,它会选择前面有site的{​​{1}}。虽然正则表达式不会选择A,但它只会确保A位于A之前。

正向前瞻与正面观察相同,只是在比赛结束后必须遵循表达式。

示例:撰写site将匹配紧随其后site(?=1) site的{​​{1}}。作为积极的观察,它不会选择1,但只会确保1的匹配实际上是site

您的(?&lt; =。)网站(?=。)的情况并不好,因为它会匹配您输入中的所有site1

因此,使用site只会匹配行(?<=A)site(?=0)中的网站,因为locationAsite01前面有site,后面有0。