gpt4 book ai didi

regex - Perl:为什么我的正则表达式不匹配

转载 作者:行者123 更新时间:2023-12-05 01:21:17 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式提取字符串的一部分。我有以下字符串情况:

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由数字和
提取它之前的所有内容,但由于后视需要绝对长度,我反转了字符串
并使用向前看就可以了。

现在对于 case1 我创建了下面的正则表达式,它可以正常工作并输出 Warehouse.13 .
.*?\d{1,2}e\d{1,2}s\.(?=\d+)(.*)

现在对于 case2 我使用了:
.*?\d{1,2}edosipe\d{1,2}nosaes\.(?=\d+)(.*) # works fine.

现在,当我尝试将上述两种情况+可选的分隔符组合在一起时,例如:
.*?\d{1,2}[e|edosipe]?[._ x\-]?\d{1,2}[s|nosaes]?[._\- ]?(?=\d+)(.*)

在上述情况下,您可以观察到大部分内容都是可选的(?)。它是为
案例3。

使用上述正则表达式与 case2 不匹配,但适用于 case1 和 case3。

知道这里出了什么问题。

PS:我知道可能有其他可能的字符串会违反上述正则表达式,但是
目前对他们不感兴趣。

最佳答案

[e|edosipe][s|nosaes]应该是 (e|edosipe)(s|nosaes) , 或 (?:e|edopise)(?:s|nosaes)如果您不希望正则表达式引擎捕获它们并弄乱您对 $1 的记帐, $2 , 等等。

在这里,(...)括号分组很像在 Perl 中的任何其他表达式中所做的那样。[...]定义一个字符类。具体来说,[s|nosaes]匹配单个字符,即 a , e , n , o , s , 和(也许令人惊讶,但是在 [... ] 中通常会忽略元字符的特殊含义),| .

关于regex - Perl:为什么我的正则表达式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com