我想使用正则表达式提取一部分字符串。我有以下情况的字符串:Perl:为什么我的正则表达式不匹配
case1: Warehouse.13.season01episode01.hdtv.xor.avi
case2: Warehouse.13.s01e01.hdtv.xor.avi
case3: Warehouse.13.01x01.hdtv.xor.avi
在上面的字符串的delimter(.)
可以通过\s - _
更换。
逻辑现在用的就是检查是否s or season
由数precided(回顾后)和 提取之前的一切,但作为回顾后需要绝对长度我反向的字符串 并在其上使用的前面看。
现在为case1我创建了正常工作的下面的正则表达式,并输出Warehouse.13
。
.*?\d{1,2}e\d{1,2}s\.(?=\d+)(.*)
现在对于案例2我用:
.*?\d{1,2}edosipe\d{1,2}nosaes\.(?=\d+)(.*) # works fine.
现在,当我尝试上述两种情况+可选的分隔符像结合:
.*?\d{1,2}[e|edosipe]?[._ x\-]?\d{1,2}[s|nosaes]?[._\- ]?(?=\d+)(.*)
在你可以观察到上述情况大部分东西都是optinal(?)。这是针对案例3的 。
使用上面的正则表达式不匹配case2的任何内容,但对于case1和case3正常工作。
任何想法这里有什么问题。
PS:我知道可能有其他可能的字符串,将违抗上述正则表达式,但 目前我不感兴趣。
在上面的例子中,'Warehouse'位于字符串或行的开头吗? – DavidO
@DavidO:是的文件名以'Warehouse'开头。 – ronnie