如何将所有以下字符串与单个正则表达式匹配?
这是我尝试过的正则表达式:(?<=.+)site(?=.+)
请注意,更简单的正则表达式可能会起到作用,但重点是了解正则表达式的(?<=.+)
和(?=.+)
部分的作用。
locationAsite1
locationAsiteNumber1
locationAsiteNumber01
locationAsite01
locationBsite.01
locationB.site.02
(locationB)site.02
<locationB>site<03>s
..locationB..site<03>
答案 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。